useAddComplianceDelegate
Grant delegate permanent user-decryption delegation over this compliance clone's airdrop.
@tokenops/sdk/fhe-airdrop/react{ mutate, mutateAsync, isPending, error, data }Description
Grant delegate permanent user-decryption delegation over this compliance
clone's airdrop. options.address is the CLONE. Requires
DELEGATION_ADMIN_ROLE on it (check with useComplianceHasRole).
The gateway lag is this hook's headline. The delegation is live in the
ACL the instant the transaction lands, but the Zama gateway learns about it
out of band - @zama-fhe/sdk 3.6 cites about 10 blocks, longer behind a
lagging RPC. Do not tell the user
delegated decryption is ready on success; classify the first delegated
reads' failures with isAclPropagationError and retry with backoff.
Invalidates: this clone's useComplianceInfo entry (the
client-delegate set grew) and its useIsActiveDelegate entry for
exactly delegate. Both keyed on the clone address - the airdrop instance
is a different contract with its own cache namespace and is untouched.
Signature
function useAddComplianceDelegate(options: AirdropInstanceClientOptions): UseMutationResult<Hex, Error, AddComplianceDelegateArgs>;Parameters
Shape of the object you pass to .mutate(args) is the SDK type AddComplianceDelegateArgs. Inspect the type for the full shape (discriminated unions collapse to a tagged variant at call time).
Example
const add = useAddComplianceDelegate({ address: managerAddress });
await add.mutateAsync({ delegate: complianceOfficer });Pulled 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 addComplianceDelegate = useAddComplianceDelegate(/* options */);
addComplianceDelegate.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.useMerkleClaimClaim the outstanding amount for a proof-bearing entry on a MerkleConfidentialAirdrop instance.useGrantInstanceRolesSplit an airdrop instance's roles after create — one grantRole / revokeRole transaction per requested assignment, submitted in the order planInstanceRoleSplit computes.