useSetEcdsaImplementation
Point future createEcdsaAirdrop* calls at a new ECDSA implementation.
@tokenops/sdk/fhe-airdrop/advanced/react{ mutate, mutateAsync, isPending, error, data }Description
Point future createEcdsaAirdrop* calls at a new ECDSA implementation.
Requires IMPL_MANAGER_ROLE. Deployed instances are untouched - a clone
stays bound to the implementation live when it was created.
Moving this pointer moves every future predicted address. Any campaign
plan built before this write is stale, and on an immutable-root instance
its entries would be unclaimable; that is what PredictionDriftError
exists to catch.
Invalidates: useFactoryImplementations (fn "implementations"), plus
the fn "getEcdsaInitCodeHash", "predictEcdsaAirdropAddress" and
`preflightCreate` PREFIXES - every cached args combination of each,
because the init-code hash, the predicted address and the create preflight
all shift together with the pointer. Invalidating the predictions is what
stops a mounted UI offering a dead address.
Signature
function useSetEcdsaImplementation(options?: AirdropClientOptions): UseMutationResult<Hex, Error, SetEcdsaImplementationArgs>;Parameters
Shape of the object you pass to .mutate(args) is the SDK type SetEcdsaImplementationArgs. Inspect the type for the full shape (discriminated unions collapse to a tagged variant at call time).
Example
const setEcdsaImpl = useSetEcdsaImplementation();
await setEcdsaImpl.mutateAsync({ implementation: newEcdsaImpl });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 setEcdsaImplementation = useSetEcdsaImplementation(/* options */);
setEcdsaImplementation.mutate(args, {
onSuccess() {
// Coarse invalidation: refresh every cached read on this product surface.
queryClient.invalidateQueries({
queryKey: ["tokenops-sdk", "fhe-airdrop"],
});
},
});See also
Other Introspection hooks in airdrop v2:
usePredictEcdsaAirdropAddressWhere an ECDSA create* from deployer with this (mode, userSalt) pair would land.usePredictMerkleAirdropAddressWhere a Merkle create* from deployer with this (mode, userSalt) pair would land.useEcdsaInitCodeHashInit-code hash of the ECDSA proxy the factory would deploy for mode.useFactoryRoleConstantsRead the factory's role identifiers in one fan-out.