# Hooks

seismic-react provides four hooks that mirror wagmi's hook API but route through Seismic's shielded transport layer. Each hook wraps the corresponding seismic-viem client or contract method, handling encryption, signing, and decryption automatically.

## Hook Comparison

| seismic-react Hook         | wagmi Equivalent                 | Purpose                                   |
| -------------------------- | -------------------------------- | ----------------------------------------- |
| `useShieldedWallet`        | `useAccount` + `useWalletClient` | Access shielded public and wallet clients |
| `useShieldedContract`      | `useContract`                    | Get a ShieldedContract instance           |
| `useShieldedWriteContract` | `useWriteContract`               | Send encrypted write transactions         |
| `useSignedReadContract`    | `useReadContract`                | Execute authenticated read calls          |

{% hint style="info" %}
All hooks require `ShieldedWalletProvider` context. Calling any hook outside the provider tree will throw an error.
{% endhint %}

## Common Patterns

### Wallet check

Always verify the wallet is loaded before calling contract methods:

```typescript
const { walletClient, loaded } = useShieldedWallet()

if (!loaded) return <div>Loading wallet...</div>
if (!walletClient) return <div>Please connect your wallet</div>
```

### Loading states

The write and read hooks expose `isLoading` so you can disable buttons or show spinners:

```typescript
const { writeContract, isLoading } = useShieldedWriteContract({ address, abi, functionName: 'transfer', args })

return (
  <button onClick={writeContract} disabled={isLoading}>
    {isLoading ? 'Sending...' : 'Transfer'}
  </button>
)
```

### Error handling

Every hook returns an `error` field. Check it after operations complete:

```typescript
const { signedRead, error } = useSignedReadContract({
  address,
  abi,
  functionName: "balanceOf",
});

async function fetchBalance() {
  const result = await signedRead();
  if (error) {
    console.error("Read failed:", error.message);
  }
}
```

## Pages

| Page                                                                                                     | Description                                            |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| [useShieldedWallet](https://docs.seismic.systems/clients/typescript/react/hooks/useshieldedwallet)       | Access shielded wallet and public clients from context |
| [useShieldedContract](https://docs.seismic.systems/clients/typescript/react/hooks/useshieldedcontract)   | Get a ShieldedContract instance for reads and writes   |
| [useShieldedWriteContract](https://docs.seismic.systems/clients/typescript/react/hooks/useshieldedwrite) | Send encrypted write transactions                      |
| [useSignedReadContract](https://docs.seismic.systems/clients/typescript/react/hooks/useshieldedread)     | Execute authenticated read calls                       |

## See Also

* [ShieldedWalletProvider](https://docs.seismic.systems/clients/typescript/react/shielded-wallet-provider) -- Context provider required by all hooks
* [Installation](https://docs.seismic.systems/clients/typescript/react/installation) -- Package setup and peer dependencies
* [Seismic React Overview](https://docs.seismic.systems/clients/typescript/react) -- SDK architecture and quick start
