useMerkleClaim
Claim the outstanding amount for a proof-bearing entry on a MerkleConfidentialAirdrop instance.
@tokenops/sdk/fhe-airdrop/react{ mutate, mutateAsync, isPending, error, data }Description
Claim the outstanding amount for a proof-bearing entry on a
MerkleConfidentialAirdrop instance.
Invalidates: useClaimedAmount for entry.account on this instance — the read
whose cumulative-delivered value a successful claim changes. The contract advances
claimedAmount[account], keyed on the entry's claim identity and NOT on whoever sent
the transaction, so a relayed claim must invalidate the recipient's cache entry rather
than the relayer's. Other accounts' cached reads, and every other instance's cache,
are left untouched.
Anyone may submit an entry; see MerkleClaimArgs.entry for what a third-party
submission costs the recipient, and check useClaimedAmount first.
Signature
function useMerkleClaim(options: AirdropInstanceClientOptions): UseMutationResult<Hex, Error, MerkleClaimArgs>;Parameters
Shape of the object you pass to .mutate(args) is the SDK type MerkleClaimArgs. Inspect the type for the full shape (discriminated unions collapse to a tagged variant at call time).
Run it
Connect your wallet and click Claim a Merkle entry — this dispatches a real Sepolia transaction through the same runner the stories use.
Example
const claim = useMerkleClaim({ address: airdropAddress });
await claim.mutateAsync({ entry }); // any address may pass the entry unchangedPulled directly from the hook's TSDoc block — the same snippet your IDE shows on hover.
Errors
This mutation can reject with SDK-level, product-level, or generic-fallback errors. Product classes carry the offending value as fields — render them inline instead of a generic "transaction failed." See Airdrop v2 › Errors for the per-class recovery table.
Invalidation recipe
After this mutation succeeds, invalidate the queries it affects so consumer UI re-fetches fresh state. The SDK never auto-invalidates — that's a consumer decision (different apps cache different shapes).
import { useQueryClient } from "@tanstack/react-query";
const queryClient = useQueryClient();
const merkleClaim = useMerkleClaim(/* options */);
merkleClaim.mutate(args, {
onSuccess() {
// Coarse invalidation: refresh every cached read on this product surface.
queryClient.invalidateQueries({
queryKey: ["tokenops-sdk", "fhe-airdrop"],
});
},
});See also
Other Write hooks in airdrop v2:
useFundAirdropTop up an already-deployed instance's pool through the factory.useEcdsaClaimClaim a signed encrypted allocation on an ECDSAConfidentialAirdrop instance.useGrantInstanceRolesSplit an airdrop instance's roles after create — one grantRole / revokeRole transaction per requested assignment, submitted in the order planInstanceRoleSplit computes.useAddComplianceDelegateGrant delegate permanent user-decryption delegation over this compliance clone's airdrop.