# @tokenops/sdk — Expanded LLM Context

Typed viem-first SDK for confidential vesting, airdrops, and disperse on FHEVM (Zama Protocol).
Source of truth: @tokenops/sdk v1.6.0. Live runner in stories executes real Sepolia transactions.

## SDK package context

- Package: @tokenops/sdk v1.6.0
- Install: `pnpm add @tokenops/sdk viem @zama-fhe/sdk@^3`
- Subpaths: `@tokenops/sdk`, `@tokenops/sdk/telemetry`, `@tokenops/sdk/fhe`, `@tokenops/sdk/fhe/react`, `@tokenops/sdk/fhe-vesting`, `@tokenops/sdk/fhe-vesting/react`, `@tokenops/sdk/fhe-vesting/advanced`, `@tokenops/sdk/fhe-vesting/advanced/react`, `@tokenops/sdk/fhe-airdrop`, `@tokenops/sdk/fhe-airdrop/react`, `@tokenops/sdk/fhe-airdrop/advanced`, `@tokenops/sdk/fhe-airdrop/advanced/react`, `@tokenops/sdk/fhe-disperse`, `@tokenops/sdk/fhe-disperse/react`, `@tokenops/sdk/testnet-faucet`, `@tokenops/sdk/testnet-faucet/react`
- React subpaths require `wagmi` and `@tanstack/react-query` in the host app.
- Deployment model: SDK clients target deployed factories; there are no `deployFactory` helpers.
- FHEVM availability: vesting, airdrop, and faucet contracts are live on Sepolia; disperse is live on Mainnet and Sepolia.

## Start here

Getting-started + interactive product demos.

### Home
URL: https://docs.tokenops.xyz/

Three confidential flows on FHEVM, story-driven.

### Quickstart
URL: https://docs.tokenops.xyz/quickstart

Install, providers, encryptor, first call.

### Stories
URL: https://docs.tokenops.xyz/stories

Aria runs vesting / airdrop / disperse on Sepolia.

### Story · Testnet Faucet
URL: https://docs.tokenops.xyz/stories/testnet-faucet

Aria mints plaintext TTT + backed confidential CTTT on Sepolia — the on-ramp to the other stories.

### Story · Vesting
URL: https://docs.tokenops.xyz/stories/vesting

Aria vests her CTO Mira — 4 chapters, real Sepolia tx.

### Story · Airdrop
URL: https://docs.tokenops.xyz/stories/airdrop

Aria runs ARI Labs' community airdrop with EIP-712 claims.

### Story · Disperse
URL: https://docs.tokenops.xyz/stories/disperse

Aria pays three investors under NDA in one tx.

## Concepts

Mental models for FHEVM, encryptor, handles, ACL, errors, telemetry.

### Concepts
URL: https://docs.tokenops.xyz/concepts

Mental models for FHEVM, encryptor, handles, errors, ACL, chains, telemetry.

### Concepts · What is FHEVM?
URL: https://docs.tokenops.xyz/concepts/fhevm

Fully-homomorphic encryption on chain. Handles, ACL, why @zama-fhe is optional.

### Concepts · The encryptor source pattern
URL: https://docs.tokenops.xyz/concepts/encryptor

Eager vs lazy injection. Pitfall #3 spelled out.

### Concepts · Encrypted inputs + handles
URL: https://docs.tokenops.xyz/concepts/encrypted-handles

EncryptedInput / EncryptedHandle / EncryptedViewResult.

### Concepts · Typed errors + recovery
URL: https://docs.tokenops.xyz/concepts/errors

Three error tiers: SDK / product / viem. The catch ladder.

### Concepts · Scale-ratio math
URL: https://docs.tokenops.xyz/concepts/scale-ratio

FHE_SPLIT_DENOMINATOR, scaleRatio() — bigint arithmetic for encrypted splits.

### Concepts · Branded primitives
URL: https://docs.tokenops.xyz/concepts/branded-types

asVestingId, asAirdropId, asDisperseId — typed wrappers around Hex.

### Concepts · Preflight checks
URL: https://docs.tokenops.xyz/concepts/preflight

PreflightResult, when to run, how to surface typed blockers.

### Concepts · ACL grants + disclosure
URL: https://docs.tokenops.xyz/concepts/acl

FHE ACL is append-only. Operators + disclose hooks + FHE.allow.

### Concepts · Supported chains + addresses
URL: https://docs.tokenops.xyz/concepts/chains

DEPLOYED_ADDRESSES, chain overrides, Sepolia / Anvil / mainnet matrix.

### Concepts · SDK telemetry
URL: https://docs.tokenops.xyz/concepts/telemetry

SdkTelemetry interface, event tags, plug-your-own adapter pattern.

## Products

Per-product hubs for vesting / airdrop / disperse + the testnet faucet.

### Vesting
URL: https://docs.tokenops.xyz/vesting

Confidential vesting product hub — flows, hooks, concepts.

### Vesting · Hooks
URL: https://docs.tokenops.xyz/vesting/hooks

Faceted catalog of every public vesting method.

### Vesting · Flows
URL: https://docs.tokenops.xyz/vesting/flows

Five canonical operator flows — deploy, open, claim, disclose, transfer/recover.

### Vesting · Clients
URL: https://docs.tokenops.xyz/vesting/clients

Vanilla TS clients (factory + manager) for non-React consumers.

### Vesting · ConfidentialVestingFactoryClient
URL: https://docs.tokenops.xyz/vesting/clients/factory

Deploy manager clones, configure default fees, manage factory roles.

### Vesting · ConfidentialVestingManagerClient
URL: https://docs.tokenops.xyz/vesting/clients/manager

Per-clone client — open vestings, claim, disclose, encrypted reads, admin.

### Vesting · Types
URL: https://docs.tokenops.xyz/vesting/types

Vesting type aliases — branded ids, args, encrypted shapes, fee discriminants.

### Vesting · Errors
URL: https://docs.tokenops.xyz/vesting/errors

Typed vesting error classes — VestingNotFoundError, ClaimLockedError, AccessDeniedError, etc.

### Vesting · Roles
URL: https://docs.tokenops.xyz/vesting/roles

RBAC reference for vesting factory + manager clones.

### Vesting · Events
URL: https://docs.tokenops.xyz/vesting/events

Events emitted by the vesting factory + manager — full lifecycle, disclosure, roles.

### Vesting · ABIs
URL: https://docs.tokenops.xyz/vesting/abis

Raw ABI exports for the vesting factory + manager contracts.

### Airdrop
URL: https://docs.tokenops.xyz/airdrop

Confidential cohort airdrop product hub.

### Airdrop · Hooks
URL: https://docs.tokenops.xyz/airdrop/hooks

Faceted catalog of every public airdrop method.

### Airdrop · Flows
URL: https://docs.tokenops.xyz/airdrop/flows

Five canonical operator flows — deploy clone, fund pot, sign claims, recipient claims, admin recovery.

### Airdrop · Clients
URL: https://docs.tokenops.xyz/airdrop/clients

Vanilla TS clients (factory + airdrop clone) for non-React consumers.

### Airdrop · ConfidentialAirdropFactoryClient
URL: https://docs.tokenops.xyz/airdrop/clients/factory

Deploy per-campaign clones, manage default fees, roles.

### Airdrop · ConfidentialAirdropClient
URL: https://docs.tokenops.xyz/airdrop/clients/airdrop

Per-clone client — fund, sign claim, claim, extend window.

### Airdrop · Types
URL: https://docs.tokenops.xyz/airdrop/types

Airdrop type aliases — EIP-712 signature shape, claim args, config.

### Airdrop · Errors
URL: https://docs.tokenops.xyz/airdrop/errors

Typed airdrop error classes — AlreadyClaimedError, ClaimWindowClosedError, etc.

### Airdrop · Roles
URL: https://docs.tokenops.xyz/airdrop/roles

RBAC reference — DEFAULT_ADMIN_ROLE, FEE_COLLECTOR_ROLE, factory FEE_MANAGER_ROLE.

### Airdrop · Events
URL: https://docs.tokenops.xyz/airdrop/events

Events emitted by the airdrop factory + clones.

### Airdrop · ABIs
URL: https://docs.tokenops.xyz/airdrop/abis

Raw ABI exports for the airdrop factory + clone contracts.

### Disperse
URL: https://docs.tokenops.xyz/disperse

One-tx confidential payouts to many product hub.

### Disperse · Hooks
URL: https://docs.tokenops.xyz/disperse/hooks

Faceted catalog of every public disperse method.

### Disperse · Flows
URL: https://docs.tokenops.xyz/disperse/flows

Four canonical operator flows — register, approve the wallet pair, disperse to N recipients, recover + fees.

### Disperse · Clients
URL: https://docs.tokenops.xyz/disperse/clients

Vanilla TS client for the disperse singleton (non-React consumers).

### Disperse · ConfidentialDisperseClient
URL: https://docs.tokenops.xyz/disperse/clients/singleton

Singleton client — register, approve, preflight, disperse, disclose, recover.

### Disperse · Types
URL: https://docs.tokenops.xyz/disperse/types

Disperse type aliases — preflight result + reason, batch args.

### Disperse · Errors
URL: https://docs.tokenops.xyz/disperse/errors

Typed disperse error classes — NotRegisteredError, DisperseSubwalletNotFoundError, BatchTooLargeError, PausedError.

### Disperse · Roles
URL: https://docs.tokenops.xyz/disperse/roles

RBAC reference for the disperse singleton.

### Disperse · Events
URL: https://docs.tokenops.xyz/disperse/events

Events emitted by the disperse singleton — registration, dispersal, ACL grants.

### Disperse · ABIs
URL: https://docs.tokenops.xyz/disperse/abis

Raw ABI exports for the disperse singleton + subwallet contracts.

### Testnet Faucet
URL: https://docs.tokenops.xyz/testnet-faucet

Mint value-less TTT + confidential CTTT test tokens on Sepolia — testnet-only faucet hub.

### Testnet Faucet · Quickstart
URL: https://docs.tokenops.xyz/testnet-faucet/quickstart

Create the faucet client and mint plaintext TTT + CTTT on Sepolia — no encryptor.

### Testnet Faucet · Flows
URL: https://docs.tokenops.xyz/testnet-faucet/flows

Four faucet flows — mint TTT, mint backed CTTT, read balances, read metadata + supply.

### Testnet Faucet · Hooks
URL: https://docs.tokenops.xyz/testnet-faucet/hooks

Faceted catalog of every public testnet-faucet method.

### Testnet Faucet · Clients
URL: https://docs.tokenops.xyz/testnet-faucet/clients

Vanilla TS client for the testnet faucet (non-React consumers).

### Testnet Faucet · TestnetFaucetClient
URL: https://docs.tokenops.xyz/testnet-faucet/clients/faucet

Single client — mintUnderlying, mintConfidential, balances, decimals, rate, supply, metadata.

### Testnet Faucet · Types
URL: https://docs.tokenops.xyz/testnet-faucet/types

Faucet type aliases — FaucetMetadata, mint args/results, client config.

### Testnet Faucet · Errors
URL: https://docs.tokenops.xyz/testnet-faucet/errors

Typed faucet error classes — FaucetSupplyExhaustedError, chain + wallet preconditions.

### Testnet Faucet · Events
URL: https://docs.tokenops.xyz/testnet-faucet/events

Events from the TTT + CTTT test tokens — Transfer, ConfidentialMint, and the ERC-7984 surface.

### Testnet Faucet · ABIs
URL: https://docs.tokenops.xyz/testnet-faucet/abis

Raw ABI exports for the TTT (ERC-20) + CTTT (ERC-7984) tokens.

## Recipes

Copy-paste-ready solutions to common integration questions.

### Recipes
URL: https://docs.tokenops.xyz/recipes

Goal-driven cookbook — first tx, server-side, Next App Router, testing, telemetry.

### Recipe · Your first encrypted tx
URL: https://docs.tokenops.xyz/recipes/first-encrypted-tx

Connect a wallet, encrypt a uint64, create a vesting on Sepolia.

### Recipe · Server-side encryptor
URL: https://docs.tokenops.xyz/recipes/server-side-encryptor

Node + private key + RPC. Eager encryptor injection.

### Recipe · Next.js App Router integration
URL: https://docs.tokenops.xyz/recipes/next-app-router

Provider tree, lazy encryptor, server actions vs client mutations.

### Recipe · Vite SPA integration
URL: https://docs.tokenops.xyz/recipes/vite-spa

Vite + React + wagmi setup. No Next-specific machinery.

### Recipe · Custom RPC + chain overrides
URL: https://docs.tokenops.xyz/recipes/custom-rpc-and-chains

Use Alchemy / Infura / your own RPC behind viem.

### Recipe · Testing with mock encryptor
URL: https://docs.tokenops.xyz/recipes/testing-with-mock-encryptor

Anvil + forge-fhevm + deterministic FHE tests, no relayer.

### Recipe · Reading encrypted state
URL: https://docs.tokenops.xyz/recipes/reading-encrypted-state

useGetVestedAmount and useDecryptedHandle two-phase pattern.

### Recipe · Off-chain admin signer
URL: https://docs.tokenops.xyz/recipes/signing-claim-authorization

Sign EIP-712 Claim authorizations from a server or cold wallet.

### Recipe · Indexing events
URL: https://docs.tokenops.xyz/recipes/indexing-events

Backfill plus watch with viem; per-product event reference.

### Recipe · Error recovery patterns
URL: https://docs.tokenops.xyz/recipes/error-recovery-patterns

Per-error-class recovery snippets — invalidate, countdown, fresh sig, render reasons.

### Recipe · Mainnet readiness checklist
URL: https://docs.tokenops.xyz/recipes/mainnet-readiness-checklist

Six gates before flipping a confidential product to Ethereum mainnet.

### Recipe · Chain switching
URL: https://docs.tokenops.xyz/recipes/chain-switching

Sepolia ↔ mainnet ↔ custom chain — provider tree + viem chain swap patterns.

### Recipe · Gas + fees
URL: https://docs.tokenops.xyz/recipes/gas-and-fees

What an FHE write actually costs — gas vs token fees, claim-side branching, batch cost shape, verified gas ranges + estimate headroom.

### Recipe · Handling wallet rejection
URL: https://docs.tokenops.xyz/recipes/handling-wallet-rejection

User-rejection is a UX state, not an error. How to recover, retry, and not log noise.

### Recipe · React Native
URL: https://docs.tokenops.xyz/recipes/react-native

WalletConnect + private-key signer flavours; the encryptor source pattern with no `window`.

## Reference

Flat machine-readable indices and operational facts — addresses, audits, mainnet-readiness, telemetry policy, security, changelog.

### API Reference
URL: https://docs.tokenops.xyz/api-reference

Flat machine-readable index of every export.

### Resources
URL: https://docs.tokenops.xyz/resources

Deployed addresses, audit posture, bounty timeline, security.

### Resources · Mainnet readiness
URL: https://docs.tokenops.xyz/resources/mainnet-readiness

Per-product status, the relayer + KMS dependency model, gas + HCU envelope, the four gates before Phase 2.

### Resources · Changelog
URL: https://docs.tokenops.xyz/resources/changelog

@tokenops/sdk release notes — per-version highlights, plus verified upstream @zama-fhe/sdk breaking-change notes.

### Resources · Security
URL: https://docs.tokenops.xyz/resources/security

Threat model, audit posture, responsible disclosure for @tokenops/sdk.

### Resources · Contributing
URL: https://docs.tokenops.xyz/resources/contributing

Feedback inbox + PR workflow + contribution bar for @tokenops/sdk.

### Resources · Support
URL: https://docs.tokenops.xyz/resources/support

Four support channels (inbox, private vulnerability report, Discord, GitHub) with SLAs.

### Resources · Telemetry policy
URL: https://docs.tokenops.xyz/resources/telemetry-policy

What the SDK + docs site collect via SdkTelemetry and DocsTelemetry. Privacy posture, scrubbing rules.

## Hooks reference

### Vesting — `@tokenops/sdk/fhe-vesting/react` (79 hooks)

#### useConfidentialVestingFactoryImplementation
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useConfidentialVestingFactoryImplementation(options?: BaseHookOptions): UseQueryResult<Address, Error>;`

Read the FHE-vesting factory's current implementation() address — the LibClone target every new manager clone delegates to.

#### useFactoryDefaultGasFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryDefaultGasFee(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the factory-wide default gas fee (in wei) — applied to new FeeType.Gas manager clones at deployment.

#### useFactoryDefaultTokenFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryDefaultTokenFee(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the factory-wide default token fee in basis points — applied to new FeeType.DistributionToken manager clones at deployment.

#### useFactoryDefaultFeeType
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryDefaultFeeType(options?: BaseHookOptions): UseQueryResult<FeeType, Error>;`

Read the factory-wide default fee model (FeeType.Gas or FeeType.DistributionToken) applied to newly-created manager clones.

#### useFactoryFeeCollector
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryFeeCollector(options?: BaseHookOptions): UseQueryResult<Address, Error>;`

Read the factory's current fee collector address.

#### useFactoryCustomFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryCustomFee(args?: UseFactoryCustomFeeArgs): UseQueryResult<CustomFee, Error>;`

Read the per-creator fee override set on the factory for creator.

#### useFactoryInitCodeHash
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryInitCodeHash(args?: UseFactoryInitCodeHashArgs): UseQueryResult<Hex, Error>;`

Read the init-code hash the factory would use to CREATE2 a manager clone with the given token + deployer (+ optional immutable flags).

#### useCreateManagerAndGetAddress
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useCreateManagerAndGetAddress(options?: BaseHookOptions): UseMutationResult<CreateManagerResult, Error, CreateManagerArgs>;`

Deploy a manager and wait for the receipt — returns the deterministic clone address.

#### useCreateManager
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useCreateManager(options?: BaseHookOptions): UseMutationResult<CreateManagerResult, Error, CreateManagerArgs>;`

Deploy a per-user vesting manager clone via the factory.

#### useSetDefaultGasFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetDefaultGasFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetDefaultGasFeeArgs>;`

Admin: set the factory-wide default gas fee (in wei).

#### useSetDefaultTokenFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetDefaultTokenFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetDefaultTokenFeeArgs>;`

Admin: set the factory-wide default token fee (basis points).

#### useSetDefaultFeeType
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetDefaultFeeType(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetDefaultFeeTypeArgs>;`

Admin: set the factory's default fee model (FeeType.Gas or FeeType.DistributionToken) for new manager clones.

#### useResetGasFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useResetGasFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseResetGasFeeArgs | undefined>;`

Admin: reset the factory's default gas fee to zero.

#### useResetTokenFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useResetTokenFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseResetTokenFeeArgs | undefined>;`

Admin: reset the factory's default token fee to zero.

#### useSetCustomFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetCustomFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetCustomFeeArgs>;`

Admin: install a per-creator fee override on the factory.

#### useDisableCustomFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDisableCustomFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseDisableCustomFeeArgs>;`

Admin: disable the per-creator fee override for creator.

#### useSetFeeCollector
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetFeeCollector(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetFeeCollectorArgs>;`

Admin: set the factory's fee collector address.

#### useManagerToken
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerToken(options: ManagerHookOptions): UseQueryResult<Address, Error>;`

The manager clone's immutable underlying token address.

#### useManagerFeeType
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerFeeType(options: ManagerHookOptions): UseQueryResult<FeeType, Error>;`

Read the manager clone's immutable FEE_TYPE (FeeType.Gas or FeeType.DistributionToken).

#### useManagerFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerFee(options: ManagerHookOptions): UseQueryResult<bigint, Error>;`

Read the manager clone's immutable FEE (in wei for FeeType.Gas, in basis points for FeeType.DistributionToken).

#### useManagerFeeInfo
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerFeeInfo(options: ManagerHookOptions): UseQueryResult<ManagerFeeInfo, Error>;`

Resolves { feeType, fee } — caller passes the right branch to useClaim.

#### useManagerDeploymentBlockNumber
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerDeploymentBlockNumber(options: ManagerHookOptions): UseQueryResult<bigint, Error>;`

Read the manager clone's immutable DEPLOYMENT_BLOCK_NUMBER — the block at which the factory deployed this clone via LibClone.

#### useManagerIsSplitEnabled
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerIsSplitEnabled(options: ManagerHookOptions): UseQueryResult<boolean, Error>;`

Read whether the manager clone has split-vesting enabled (immutable).

#### useManagerIsPausable
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerIsPausable(options: ManagerHookOptions): UseQueryResult<boolean, Error>;`

Read whether the manager clone has pause/unpause enabled (immutable).

#### useManagerPaused
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerPaused(options: ManagerHookOptions): UseQueryResult<boolean, Error>;`

Read whether the manager clone is currently paused.

#### useManagerMaxBatchSize
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerMaxBatchSize(options: ManagerHookOptions): UseQueryResult<bigint, Error>;`

Read the manager clone's maxBatchSize — upper bound for batchCreateVesting.

#### useManagerMaxRevokeBatchSize
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useManagerMaxRevokeBatchSize(options: ManagerHookOptions): UseQueryResult<bigint, Error>;`

Read the manager clone's maxRevokeBatchSize — upper bound for batchRevokeVesting.

#### useVestingInfo
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useVestingInfo(args: UseVestingInfoArgs): UseQueryResult<VestingInfo, Error>;`

Plaintext schedule shape (start / end / cliff / interval) + encrypted-handle metadata.

#### useAllRecipients
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAllRecipients(options: ManagerHookOptions): UseQueryResult<readonly Address[], Error>;`

Every recipient currently registered on this manager.

#### useAllRecipientsLength
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAllRecipientsLength(options: ManagerHookOptions): UseQueryResult<bigint, Error>;`

Count of registered recipients (cheap pre-paging check).

#### useAllRecipientsSliced
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAllRecipientsSliced(args: UseAllRecipientsSlicedArgs): UseQueryResult<readonly Address[], Error>;`

Read a [start, end) slice of the recipients set.

#### useIsRecipient
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useIsRecipient(args: UseIsRecipientArgs): UseQueryResult<boolean, Error>;`

Read whether account is currently a recipient on this manager clone.

#### useRecipientVestings
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useRecipientVestings(args: UseRecipientVestingsArgs): UseQueryResult<readonly Hex[], Error>;`

Read all vesting IDs owned by recipient.

#### useRecipientVestingsLength
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useRecipientVestingsLength(args: UseRecipientVestingsLengthArgs): UseQueryResult<bigint, Error>;`

Read the number of vesting schedules owned by recipient.

#### useRecipientVestingsSliced
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useRecipientVestingsSliced(args: UseRecipientVestingsSlicedArgs): UseQueryResult<readonly Hex[], Error>;`

Read a [start, end) slice of recipient's vesting IDs.

#### usePendingVestingTransfer
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function usePendingVestingTransfer(args: UsePendingVestingTransferArgs): UseQueryResult<PendingTransfer, Error>;`

Read the pending transfer (if any) on a vesting — returns { newRecipient, initiatedAt, expiresAt }.

#### useHasRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: query
- encryptor: plaintext
- signature: `function useHasRole(args: UseHasRoleArgs): UseQueryResult<boolean, Error>;`

Read AccessControl: is account a member of role on this manager? The role hashes are stable across deployments — see useRoleConstants if you need to look them up dynamically.

#### useRoleConstants
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useRoleConstants(options: ManagerHookOptions): UseQueryResult<RoleConstants, Error>;`

Read all eight AccessControl role hashes off the manager in one fan-out.

#### useGetVestedAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useGetVestedAmount(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseGetVestedAmountArgs>;`

Encrypted-view read: time-unlocked total. Pair with useDecryptedHandle.

#### useGetClaimableAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useGetClaimableAmount(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseGetClaimableAmountArgs>;`

Encrypted-view read: min(vested, balance) - settled. Pair with useDecryptedHandle.

#### useGetTotalAllocation
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useGetTotalAllocation(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseGetTotalAllocationArgs>;`

Encrypted-view read: original allocation. Pair with useDecryptedHandle.

#### useGetSettledAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useGetSettledAmount(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseGetSettledAmountArgs>;`

Encrypted-view read: running settled total. Pair with useDecryptedHandle.

#### useAdminGetVestedAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useAdminGetVestedAmount(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseAdminGetVestedAmountArgs>;`

Admin variant of useGetVestedAmount — caller must hold DISCLOSURE_ADMIN_ROLE.

#### useAdminGetClaimableAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useAdminGetClaimableAmount(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseAdminGetClaimableAmountArgs>;`

Admin variant of useGetClaimableAmount — caller must hold DISCLOSURE_ADMIN_ROLE.

#### useAdminGetTotalAllocation
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useAdminGetTotalAllocation(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseAdminGetTotalAllocationArgs>;`

Admin variant of useGetTotalAllocation — caller must hold DISCLOSURE_ADMIN_ROLE.

#### useAdminGetSettledAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useAdminGetSettledAmount(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseAdminGetSettledAmountArgs>;`

Admin variant of useGetSettledAmount — caller must hold DISCLOSURE_ADMIN_ROLE.

#### useAdminGetTokenBalance
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useAdminGetTokenBalance(options: ManagerHookOptions): UseMutationResult<EncryptedViewResult, Error, UseAdminGetTokenBalanceArgs | undefined>;`

Admin: read the manager clone's confidential ERC-7984 token balance as an euint64 handle.

#### useCreateVesting
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: submits
- signature: `function useCreateVesting(options: ManagerHookOptions): UseMutationResult<Hex, Error, CreateVestingArgs>;`

Open a new vesting schedule on a manager — encrypts the amount client-side, submits the tx.

#### useBatchCreateVesting
- lifecycle: batch-write — Bulk mutation with one batch proof.
- returnShape: mutation
- encryptor: submits
- signature: `function useBatchCreateVesting(options: ManagerHookOptions): UseMutationResult<Hex, Error, BatchCreateVestingArgs>;`

Batch variant of useCreateVesting — open N vestings in one tx with one batch input proof.

#### useClaim
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useClaim(options: ManagerHookOptions): UseMutationResult<Hex, Error, ClaimArgs>;`

Recipient-side claim. For FeeType.Gas managers pass value (read it with useManagerFeeInfo); omit value for FeeType.DistributionToken.

#### useAdminClaim
- lifecycle: admin — Admin-only mutation; caller must hold the relevant role.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAdminClaim(options: ManagerHookOptions): UseMutationResult<Hex, Error, ClaimArgs>;`

Admin variant of useClaim — caller must hold CLAIMER_ROLE.

#### usePartialClaim
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: submits
- signature: `function usePartialClaim(options: ManagerHookOptions): UseMutationResult<Hex, Error, PartialClaimArgs>;`

Claim less than the unlocked amount — leaves the remainder encrypted on the clone.

#### useAdminPartialClaim
- lifecycle: admin — Admin-only mutation; caller must hold the relevant role.
- returnShape: mutation
- encryptor: submits
- signature: `function useAdminPartialClaim(options: ManagerHookOptions): UseMutationResult<Hex, Error, PartialClaimArgs>;`

Admin variant of usePartialClaim — caller must hold CLAIMER_ROLE.

#### useRevokeVesting
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRevokeVesting(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseRevokeVestingArgs>;`

Admin revocation — clears the schedule (revocable variants only) and returns funds.

#### useBatchRevokeVesting
- lifecycle: batch-write — Bulk mutation with one batch proof.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useBatchRevokeVesting(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseBatchRevokeVestingArgs>;`

Batch variant of useRevokeVesting.

#### useSplitVesting
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: submits
- signature: `function useSplitVesting(options: ManagerHookOptions): UseMutationResult<SplitVestingResult, Error, SplitVestingArgs>;`

Split one vesting into two with custom proportions; both stay encrypted.

#### useInitiateVestingTransfer
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useInitiateVestingTransfer(options: ManagerHookOptions): UseMutationResult<Hex, Error, InitiateTransferArgs>;`

Recipient initiates a two-step transfer of a vesting position to another recipient.

#### useAcceptVestingTransfer
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAcceptVestingTransfer(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseAcceptVestingTransferArgs>;`

Accept an inbound vesting transfer (counterparty side).

#### useCancelVestingTransfer
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useCancelVestingTransfer(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseCancelVestingTransferArgs>;`

Cancel an outbound transfer before the counterparty accepts.

#### useDirectVestingTransfer
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDirectVestingTransfer(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseDirectVestingTransferArgs>;`

Recipient-driven one-step transfer — moves a vesting to a new owner without waiting for counterparty acceptance.

#### useDiscloseToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDiscloseToParty(options: ManagerHookOptions): UseMutationResult<DiscloseToPartyResult, Error, DiscloseArgs>;`

Grant ACL on a single encrypted field of a vesting (total allocation, settled, vested, or claimable) to a third party.

#### useBatchDiscloseToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useBatchDiscloseToParty(options: ManagerHookOptions): UseMutationResult<BatchDiscloseToPartyResult, Error, UseBatchDiscloseToPartyArgs>;`

Batch variant of useDiscloseToParty.

#### useAdminDiscloseToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAdminDiscloseToParty(options: ManagerHookOptions): UseMutationResult<DiscloseToPartyResult, Error, DiscloseArgs>;`

Admin variant of useDiscloseToParty — caller must hold DISCLOSURE_ADMIN_ROLE.

#### useAdminBatchDiscloseToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAdminBatchDiscloseToParty(options: ManagerHookOptions): UseMutationResult<BatchDiscloseToPartyResult, Error, UseAdminBatchDiscloseToPartyArgs>;`

Admin variant of useBatchDiscloseToParty — caller must hold DISCLOSURE_ADMIN_ROLE.

#### useDiscloseHandleToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDiscloseHandleToParty(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseDiscloseHandleToPartyArgs>;`

Grant ACL on a single ciphertext handle to a third party (e.g. an auditor).

#### useBatchDiscloseHandlesToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useBatchDiscloseHandlesToParty(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseBatchDiscloseHandlesToPartyArgs>;`

Batch ACL grant across many handles in one tx.

#### useWithdrawAdmin
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: submits
- signature: `function useWithdrawAdmin(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseWithdrawAdminArgs>;`

Admin: withdraw an encrypted amount of the manager's distribution token to msg.sender.

#### useWithdrawOtherToken
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdrawOtherToken(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseWithdrawOtherTokenArgs>;`

Admin: rescue an ERC-20 (non-confidential) other than this manager's configured token.

#### useWithdrawOtherConfidentialToken
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdrawOtherConfidentialToken(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseWithdrawOtherConfidentialTokenArgs>;`

Admin: rescue an ERC-7984 (confidential) token other than this manager's configured token.

#### useWithdrawGasFee
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdrawGasFee(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseWithdrawGasFeeArgs>;`

Fee collector: withdraw collected gas-fee ETH (FeeType.Gas managers).

#### useWithdrawTokenFee
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: submits
- signature: `function useWithdrawTokenFee(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseWithdrawTokenFeeArgs>;`

Fee collector: withdraw collected distribution-token fees (FeeType.DistributionToken managers).

#### useSetMaxBatchSize
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetMaxBatchSize(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseSetMaxBatchSizeArgs>;`

Admin: bump or lower maxBatchSize (cap for useBatchCreateVesting).

#### useSetMaxRevokeBatchSize
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetMaxRevokeBatchSize(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseSetMaxRevokeBatchSizeArgs>;`

Admin: bump or lower maxRevokeBatchSize (cap for useBatchRevokeVesting).

#### useTransferFeeCollectorRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useTransferFeeCollectorRole(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseTransferFeeCollectorRoleArgs>;`

Transfer the FEE_COLLECTOR_ROLE to newCollector.

#### usePause
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function usePause(options: ManagerHookOptions): UseMutationResult<Hex, Error, UsePauseArgs | undefined>;`

Pauser: pause the manager clone — blocks claim, partialClaim, splitVesting, initiateVestingTransfer, acceptVestingTransfer, and directVestingTransfer.

#### useUnpause
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useUnpause(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseUnpauseArgs | undefined>;`

Pauser: unpause the manager clone.

#### useGrantRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useGrantRole(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseGrantRoleArgs>;`

AccessControl: grant role to accountTarget.

#### useRevokeRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRevokeRole(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseRevokeRoleArgs>;`

AccessControl: revoke role from accountTarget.

#### useRenounceRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRenounceRole(options: ManagerHookOptions): UseMutationResult<Hex, Error, UseRenounceRoleArgs>;`

AccessControl: renounce role from msg.sender.

### Airdrop — `@tokenops/sdk/fhe-airdrop/react` (41 hooks)

#### useConfidentialAirdropFactoryImplementation
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useConfidentialAirdropFactoryImplementation(options?: BaseHookOptions): UseQueryResult<Address, Error>;`

Read the FHE-airdrop factory's current implementation() address — the LibClone target every new airdrop clone delegates to.

#### useFactoryDefaultGasFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryDefaultGasFee(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the factory-wide default per-claim gas fee (in wei) — applied to new airdrop clones at deployment when the creator has no custom override.

#### useFactoryFeeCollector
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryFeeCollector(options?: BaseHookOptions): UseQueryResult<Address, Error>;`

Read the factory's current fee collector address — the account authorized to call withdrawGasFee on each deployed airdrop clone.

#### useFactoryCustomFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryCustomFee(args?: UseFactoryCustomFeeArgs): UseQueryResult<CustomFee, Error>;`

Read the per-creator fee override set on the factory for creator.

#### useFactoryInitCodeHash
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useFactoryInitCodeHash(args?: UseFactoryInitCodeHashArgs): UseQueryResult<Hex, Error>;`

Read the init-code hash the factory would use to CREATE2 an airdrop clone with the given params + gasFee.

#### useCreateConfidentialAirdropAndGetAddress
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useCreateConfidentialAirdropAndGetAddress(options?: FactoryHookOptions): UseMutationResult<CreateAirdropResult, Error, CreateAirdropArgs>;`

Deploy an airdrop + wait for receipt + return the clone address.

#### useCreateConfidentialAirdrop
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useCreateConfidentialAirdrop(options?: FactoryHookOptions): UseMutationResult<CreateAirdropResult, Error, CreateAirdropArgs>;`

Deploy an airdrop clone for a token + admin + claim window.

#### useCreateAndFundConfidentialAirdrop
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: submits
- signature: `function useCreateAndFundConfidentialAirdrop(options?: FactoryHookOptions): UseMutationResult<CreateAirdropResult, Error, CreateAndFundAirdropArgs>;`

Single-flow helper: deploy + fund in one bundle.

#### useCreateAndFundConfidentialAirdropAndGetAddress
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: submits
- signature: `function useCreateAndFundConfidentialAirdropAndGetAddress(options?: FactoryHookOptions): UseMutationResult<CreateAirdropResult, Error, CreateAndFundAirdropArgs>;`

Same as useCreateAndFundConfidentialAirdrop but returns the clone address.

#### useFundConfidentialAirdrop
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: submits
- signature: `function useFundConfidentialAirdrop(options?: FactoryHookOptions): UseMutationResult<Hex, Error, FundAirdropArgs>;`

Encrypt the funding amount and transferFromConfidential into the clone.

#### useSetFeeCollector
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetFeeCollector(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetFeeCollectorArgs>;`

Admin: change the factory's fee collector address.

#### useSetDefaultGasFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetDefaultGasFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetDefaultGasFeeArgs>;`

Admin: change the factory-wide default per-claim gas fee.

#### useSetCustomFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetCustomFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseSetCustomFeeArgs>;`

Admin: install a per-creator gas-fee override on the factory.

#### useDisableCustomFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDisableCustomFee(options?: BaseHookOptions): UseMutationResult<Hex, Error, UseDisableCustomFeeArgs>;`

Admin: remove a per-creator fee override, reverting to defaultGasFee.

#### useAirdropToken
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropToken(options: AirdropHookOptions): UseQueryResult<Address, Error>;`

Read the airdrop clone's immutable TOKEN.

#### useAirdropGasFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropGasFee(options: AirdropHookOptions): UseQueryResult<bigint, Error>;`

Read the airdrop clone's immutable per-claim gas fee (in wei).

#### useAirdropStartTime
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropStartTime(options: AirdropHookOptions): UseQueryResult<number, Error>;`

Read the airdrop clone's immutable START_TIME — the unix timestamp when claims become available.

#### useAirdropCanExtendClaimWindow
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropCanExtendClaimWindow(options: AirdropHookOptions): UseQueryResult<boolean, Error>;`

Read whether the admin can extend the claim window past endTime on this airdrop clone.

#### useAirdropEndTime
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropEndTime(options: AirdropHookOptions): UseQueryResult<number, Error>;`

Read the airdrop clone's endTime — the unix timestamp when claims close.

#### useAirdropIsPaused
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropIsPaused(options: AirdropHookOptions): UseQueryResult<boolean, Error>;`

Read whether claims are currently paused by the admin on this airdrop clone.

#### useAirdropDeploymentBlockNumber
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropDeploymentBlockNumber(options: AirdropHookOptions): UseQueryResult<bigint, Error>;`

Read the block number at which this airdrop clone was deployed.

#### useAirdropDomainSeparator
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropDomainSeparator(options: AirdropHookOptions): UseQueryResult<Hex, Error>;`

Read the EIP-712 domain separator for this airdrop clone.

#### useAirdropClaimTypehash
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropClaimTypehash(options: AirdropHookOptions): UseQueryResult<Hex, Error>;`

Read the EIP-712 type hash for Claim(address recipient,bytes32 encryptedAmount).

#### useAirdropIsClaimWindowActive
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropIsClaimWindowActive(options: AirdropHookOptions): UseQueryResult<boolean, Error>;`

Returns true when the current timestamp is within [startTime, endTime] AND claims are not paused.

#### useAirdropHasClaimStarted
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropHasClaimStarted(options: AirdropHookOptions): UseQueryResult<boolean, Error>;`

Read whether the current chain timestamp is past START_TIME on this airdrop clone.

#### useAirdropHasClaimEnded
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropHasClaimEnded(options: AirdropHookOptions): UseQueryResult<boolean, Error>;`

Read whether the current chain timestamp is past endTime on this airdrop clone.

#### useAirdropClaimedSignatures
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropClaimedSignatures(args: UseAirdropClaimedSignaturesArgs): UseQueryResult<boolean, Error>;`

Check whether a pre-computed claim struct hash has been consumed on this airdrop clone.

#### useAirdropIsSignatureClaimed
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropIsSignatureClaimed(args: UseAirdropIsSignatureClaimedArgs): UseQueryResult<boolean, Error>;`

Has this admin signature already been redeemed?

#### useAirdropIsSignatureValid
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropIsSignatureValid(args: UseAirdropIsSignatureValidArgs): UseQueryResult<boolean, Error>;`

On-chain view that checks whether the admin signature is valid for the connected caller before paying gas — returns false for a non-admin signer or already-claimed signature; throws if the claim window is inactive or the signature bytes are malformed.

#### useAirdropHasRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: query
- encryptor: plaintext
- signature: `function useAirdropHasRole(args: UseAirdropHasRoleArgs): UseQueryResult<boolean, Error>;`

Read AccessControl: is account a member of role on this airdrop clone? The role hashes are stable across deployments (DEFAULT_ADMIN_ROLE, FEE_COLLECTOR_ROLE, etc.).

#### useClaim
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useClaim(options: AirdropHookOptions): UseMutationResult<Hex, Error, ClaimArgs>;`

Claim tokens from an airdrop using an EIP-712 admin signature.

#### useGetClaimAmount
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useGetClaimAmount(options: AirdropHookOptions): UseMutationResult<EncryptedViewResult, Error, GetClaimAmountArgs>;`

Submits a transaction (costs gas) to grant the caller decrypt access to the claim amount as an euint64 handle. The handle is granted persistent ACL on-chain via FHE.allow(handle, msg.sender); the SDK extracts it from the receipt's ACL.Allowed event (NOT from simulation — that returns a divergent, ACL-less handle; see CLAUDE.md Pitfall #1).

#### useWithdraw
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdraw(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseWithdrawArgs>;`

Admin: withdraw all confidential tokens from the airdrop to recipient.

#### useSetPaused
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetPaused(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseSetPausedArgs>;`

Admin: pause or unpause claims on this airdrop clone.

#### useExtendClaimWindow
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useExtendClaimWindow(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseExtendClaimWindowArgs>;`

Admin extends the claim deadline.

#### useWithdrawOtherToken
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdrawOtherToken(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseWithdrawOtherTokenArgs>;`

Admin: rescue accidentally sent ERC-20 (non-confidential) tokens.

#### useWithdrawOtherConfidentialToken
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdrawOtherConfidentialToken(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseWithdrawOtherConfidentialTokenArgs>;`

Admin: rescue accidentally sent ERC-7984 confidential tokens (other than this airdrop's configured TOKEN).

#### useAirdropWithdrawGasFee
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAirdropWithdrawGasFee(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseAirdropWithdrawGasFeeArgs>;`

Fee collector: withdraw collected ETH gas fees from the airdrop clone.

#### useAirdropGrantRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAirdropGrantRole(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseAirdropGrantRoleArgs>;`

AccessControl: grant role to accountTarget on this airdrop clone.

#### useAirdropRevokeRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useAirdropRevokeRole(options: AirdropHookOptions): UseMutationResult<Hex, Error, UseAirdropRevokeRoleArgs>;`

AccessControl: revoke role from accountTarget on this airdrop clone.

#### useSignClaimAuthorization
- lifecycle: signature — Off-chain EIP-712 signing helper. No chain interaction.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSignClaimAuthorization(options?: UseSignClaimAuthorizationOptions): UseMutationResult<Hex, Error, UseSignClaimAuthorizationArgs>;`

Admin signs the off-chain EIP-712 Claim(address recipient,bytes32 encryptedAmount) message.

### Disperse — `@tokenops/sdk/fhe-disperse/react` (37 hooks)

#### useIsRegistered
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useIsRegistered(args?: UseIsRegisteredArgs): UseQueryResult<boolean, Error>;`

Has this deployer already called register?

#### useGetWallets
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useGetWallets(args?: UseGetWalletsArgs): UseQueryResult<[Address, Address] | null, Error>;`

Read the deployer's two registered subwallet addresses.

#### usePredictWallets
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function usePredictWallets(args?: UsePredictWalletsArgs): UseQueryResult<[Address, Address], Error>;`

Compute the deterministic subwallet addresses for a deployer without registering.

#### useGetFees
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useGetFees(args?: UseGetFeesArgs): UseQueryResult<UserFees, Error>;`

Read consolidated fee information for user — combines per-user resolved fees (getFeeAmounts) with the global feeConfig toggles in one read.

#### useGetFeeConfig
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useGetFeeConfig(options?: BaseHookOptions): UseQueryResult<FeeConfig, Error>;`

Read the singleton's { gasFeeEnabled, tokenFeeEnabled, defaultGasFee, defaultTokenFee } fee config.

#### useGetBatchLimits
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useGetBatchLimits(options?: BaseHookOptions): UseQueryResult<BatchLimits, Error>;`

Read the maximum batch size for each of the three disperse modes ("wallet", "direct", "wallet-token-fee").

#### useCalculateFee
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useCalculateFee(args?: UseCalculateFeeArgs): UseQueryResult<CalculatedFee, Error>;`

Quote the on-chain fee config for a given disperse batch shape (count + mode).

#### useHasApprovedSubwallets
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useHasApprovedSubwallets(args?: UseHasApprovedSubwalletsArgs): UseQueryResult<SubwalletApprovalState, Error>;`

Check whether a user's registered subwallets have approved the singleton as an ERC-7984 operator for token.

#### useHasRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: query
- encryptor: plaintext
- signature: `function useHasRole(args?: UseHasRoleArgs): UseQueryResult<boolean, Error>;`

Read AccessControl: is account a member of role on the singleton? All five role constants (DEFAULT_ADMIN_ROLE, FEE_MANAGER_ROLE, FEE_COLLECTOR_ROLE, PAUSER_ROLE, WITHDRAWER_ROLE) are exported from @tokenops/sdk/fhe-disperse/react.

#### useIsPaused
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: query
- encryptor: plaintext
- signature: `function useIsPaused(options?: BaseHookOptions): UseQueryResult<boolean, Error>;`

Read the singleton's paused flag.

#### useDeploymentBlockNumber
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useDeploymentBlockNumber(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the block number at which the singleton was deployed — useful as the fromBlock argument to getLogs when subscribing to events.

#### useWalletImplementation
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function useWalletImplementation(options?: BaseHookOptions): UseQueryResult<Address, Error>;`

Read the WALLET_IMPLEMENTATION address — the singleton clones this deterministically (Clones.cloneDeterministic) for each registered user to derive their wallet pair.

#### usePreflightDisperse
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function usePreflightDisperse(args?: UsePreflightDisperseArgs): UseQueryResult<PreflightReport, Error>;`

Dry-run validator — checks operator + balance + paused state before broadcasting.

#### useRegister
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRegister(options?: DisperseHookOptions): UseMutationResult<RegisterResult, Error, UseRegisterArgs>;`

First-time setup for a deployer — singleton creates the two ERC-1167 subwallets.

#### useApproveTokenOnWallets
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useApproveTokenOnWallets(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseApproveTokenOnWalletsArgs>;`

Approve the singleton as an ERC-7984 operator over the caller's registered subwallets for a single token.

#### useRevokeTokenOnWallets
- lifecycle: setup — Deploy or first-time-register operation.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRevokeTokenOnWallets(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseRevokeTokenOnWalletsArgs>;`

Revoke operator approval on the subwallets (rollback).

#### useRecoverFromWallets
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRecoverFromWallets(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseRecoverFromWalletsArgs>;`

Recover residual confidential ERC-7984 tokens from the caller's registered wallets to to.

#### useRecoverERC20FromWallets
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRecoverERC20FromWallets(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseRecoverERC20FromWalletsArgs>;`

Recover ERC-20 tokens accidentally sent to the caller's registered wallets.

#### useDisperse
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: submits
- signature: `function useDisperse(options?: DisperseHookOptions): UseMutationResult<DisperseResult, Error, DisperseArgs>;`

Multi-recipient confidential transfer in one tx — batch-encrypts amounts + per-recipient ACL.

#### useAccessEncryptedFeeReserve
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useAccessEncryptedFeeReserve(options?: DisperseHookOptions): UseMutationResult<EncryptedViewResult, Error, GetEncryptedFeeReserveArgs>;`

MUTATION — submits a transaction (costs gas). Mirrors the on-chain accessEncryptedFeeReserve(token) function: grants the caller persistent decrypt access to the encrypted token fee reserve as an euint64 handle.

#### useGetEncryptedFeeReserve
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: mutation
- encryptor: reads-handle
- signature: `function useGetEncryptedFeeReserve(options?: DisperseHookOptions): UseMutationResult<EncryptedViewResult, Error, GetEncryptedFeeReserveArgs>;`

@deprecated — Renamed to useAccessEncryptedFeeReserve; will be removed in the next major. MUTATION — submits a transaction (costs gas). Mirrors the on-chain accessEncryptedFeeReserve(token) function: grants the caller persistent decrypt access to the encrypted token fee reserve as an euint64 handle.

#### useDiscloseHandleToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDiscloseHandleToParty(options?: DisperseHookOptions): UseMutationResult<DisclosureResult, Error, DiscloseHandleArgs>;`

Grant ACL on a single ciphertext handle to a third party (e.g. an auditor).

#### useBatchDiscloseHandlesToParty
- lifecycle: disclose — Grant ACL on a handle to a third party.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useBatchDiscloseHandlesToParty(options?: DisperseHookOptions): UseMutationResult<DisclosureResult, Error, BatchDiscloseHandlesArgs>;`

Batch ACL grant across many handles in one tx.

#### usePause
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function usePause(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UsePauseArgs>;`

Admin: pause all disperse operations on the singleton.

#### useUnpause
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useUnpause(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseUnpauseArgs>;`

Admin: unpause the singleton.

#### useSetFeeConfig
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetFeeConfig(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseSetFeeConfigArgs>;`

Admin: update the global fee configuration — enable/disable gas and token fees, set the defaults.

#### useSetCustomFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetCustomFee(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseSetCustomFeeArgs>;`

Admin: install a per-user fee override (gas fee in wei, token fee in BPS).

#### useDisableCustomFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useDisableCustomFee(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseDisableCustomFeeArgs>;`

Admin: remove a per-user fee override, falling back to the global defaults.

#### useSetMaxBatchSizeHolding
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetMaxBatchSizeHolding(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseSetMaxBatchSizeHoldingArgs>;`

Admin: set the maximum batch size for "wallet" mode disperses.

#### useSetMaxBatchSizeDirect
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetMaxBatchSizeDirect(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseSetMaxBatchSizeDirectArgs>;`

Admin: set the maximum batch size for "direct" mode disperses.

#### useSetMaxBatchSizeTokenFee
- lifecycle: configure — Operator-facing parameter setter.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useSetMaxBatchSizeTokenFee(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseSetMaxBatchSizeTokenFeeArgs>;`

Admin: set the maximum batch size for "wallet-token-fee" mode disperses.

#### useWithdrawGasFee
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useWithdrawGasFee(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseWithdrawGasFeeArgs>;`

Fee-collector: withdraw amount wei of accumulated ETH gas fees from the singleton to to.

#### useWithdrawTokenFee
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: submits
- signature: `function useWithdrawTokenFee(options?: DisperseHookOptions): UseMutationResult<WithdrawTokenFeeResult, Error, UseWithdrawTokenFeeArgs>;`

Fee-collector: withdraw accumulated encrypted token fees.

#### useRescueConfidentialTokens
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRescueConfidentialTokens(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseRescueConfidentialTokensArgs>;`

Sweep stranded confidential tokens out of the singleton contract (admin-only).

#### useRescueERC20
- lifecycle: recovery — Pause / unpause / withdraw / rescue.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRescueERC20(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseRescueERC20Args>;`

Sweep stranded plain ERC-20 tokens (e.g. someone sent the wrong token).

#### useGrantRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useGrantRole(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseGrantRoleArgs>;`

AccessControl: grant role to accountTarget on the singleton.

#### useRevokeRole
- lifecycle: roles — RBAC: grant / revoke / renounce / read role membership.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useRevokeRole(options?: DisperseHookOptions): UseMutationResult<Hex, Error, UseRevokeRoleArgs>;`

AccessControl: revoke role from accountTarget on the singleton.

### Shared FHE — `@tokenops/sdk/fhe/react` (1 hooks)

#### useDecryptedHandle
- lifecycle: encrypted-read — Reads an encrypted handle. Some are useQuery, some useMutation (FHE.allow grants ACL inside a tx).
- returnShape: custom
- encryptor: reads-handle
- signature: `function useDecryptedHandle(opts: UseDecryptedHandleOptions): UseDecryptedHandleResult;`

Subscribe to a single encrypted handle and reactively decrypt via the connected wallet.

### Vesting (advanced) — `@tokenops/sdk/fhe-vesting/advanced/react` (1 hooks)

#### usePredictManagerAddress
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function usePredictManagerAddress(args?: UsePredictManagerAddressArgs): UseQueryResult<Address, Error>;`

CREATE2 the manager clone address before deploying — pre-flight UI flows.

### Airdrop (advanced) — `@tokenops/sdk/fhe-airdrop/advanced/react` (1 hooks)

#### usePredictAirdropAddress
- lifecycle: introspection — Deterministic CREATE2 inputs, immutable deployment metadata.
- returnShape: query
- encryptor: plaintext
- signature: `function usePredictAirdropAddress(args?: UsePredictAirdropAddressArgs): UseQueryResult<Address, Error>;`

CREATE2 the airdrop clone address before deploying.

### Testnet Faucet — `@tokenops/sdk/testnet-faucet/react` (11 hooks)

#### useConfidentialBalance
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useConfidentialBalance(args?: UseConfidentialBalanceArgs): UseQueryResult<Hex, Error>;`

Read the encrypted confidential balance handle (euint64 ciphertext) for account — defaults to the connected wallet.

#### useUnderlyingBalance
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useUnderlyingBalance(args?: UseUnderlyingBalanceArgs): UseQueryResult<bigint, Error>;`

Read the plaintext underlying TokenopsTestToken (TTT) balance for account (defaults to the connected wallet), in TTT 18-decimal base units.

#### useFaucetRate
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFaucetRate(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the decimal-conversion rate between underlying and confidential units: 1 CTTT 6-decimal unit is backed by rate TTT 18-decimal base units (10^(18-6) = 10^12).

#### useFaucetDecimals
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFaucetDecimals(options?: BaseHookOptions): UseQueryResult<number, Error>;`

Read the decimals of the confidential token (CTTT) — 6.

#### useUnderlyingDecimals
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useUnderlyingDecimals(options?: BaseHookOptions): UseQueryResult<number, Error>;`

Read the decimals of the underlying token (TTT) — 18.

#### useUnderlyingTokenAddress
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useUnderlyingTokenAddress(options?: BaseHookOptions): UseQueryResult<Address, Error>;`

Read the underlying TokenopsTestToken (TTT) address backing the CTTT wrapper.

#### useInferredTotalSupply
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useInferredTotalSupply(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the wrapper's inferred total supply: underlying held in custody divided by rate, an upper bound on the confidential total supply, in CTTT 6-decimal units.

#### useMaxTotalSupply
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useMaxTotalSupply(options?: BaseHookOptions): UseQueryResult<bigint, Error>;`

Read the max confidential total supply the wrapper supports (type(uint64).max).

#### useFaucetMetadata
- lifecycle: read — Plaintext on-chain read.
- returnShape: query
- encryptor: plaintext
- signature: `function useFaucetMetadata(options?: BaseHookOptions): UseQueryResult<FaucetMetadata, Error>;`

Read consolidated faucet metadata in a single hook — both tokens' name/symbol/decimals/address, the conversion rate, and the maxTotalSupply ceiling.

#### useMintConfidential
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useMintConfidential(options?: BaseHookOptions): UseMutationResult<MintConfidentialResult, Error, UseMintConfidentialArgs>;`

Mint backed confidential test tokens (CTTT) to a recipient.

#### useMintUnderlying
- lifecycle: write — Mutating write through the connected wallet.
- returnShape: mutation
- encryptor: plaintext
- signature: `function useMintUnderlying(options?: BaseHookOptions): UseMutationResult<MintUnderlyingResult, Error, UseMintUnderlyingArgs>;`

Mint standard (non-confidential) ERC-20 test tokens (TTT) to a recipient.

## License

BSD-3-Clause-Clear. SDK version v1.6.0. Audit status per product on /resources.
