Skip to main content

Install

npm install @cloak.ag/sdk @solana/web3.js @solana/wallet-adapter-react
Add wallet UI packages as needed:
npm install @solana/wallet-adapter-react-ui @solana/wallet-adapter-wallets

Note-based integration (CloakSDK)

import { useMemo } from "react";
import { CloakSDK } from "@cloak.ag/sdk";
import { useWallet } from "@solana/wallet-adapter-react";
import { PublicKey } from "@solana/web3.js";

export function useCloak() {
  const { publicKey, signTransaction, sendTransaction } = useWallet();

  return useMemo(() => {
    if (!publicKey || !sendTransaction) return null;

    return new CloakSDK({
      wallet: { publicKey, signTransaction, sendTransaction },
      network: "devnet",
      programId: new PublicKey("3EvH6XYQir7D2RyzCdP7QFmJFfSPfdeoB8VnpLdEF4Kr"),
    });
  }, [publicKey, signTransaction, sendTransaction]);
}

UTXO integration with wallet signing

For UTXO transact deposits in browser apps, pass wallet signing fields in TransactOptions:
const result = await transact(params, {
  connection,
  programId,
  relayUrl,
  signTransaction,         // wallet adapter signer
  depositorPublicKey,      // wallet public key
  riskOracleQueue,         // if required by deployment
  riskQuoteUrl,            // risk quote backend (if needed)
  addressLookupTableAccounts,
});
For web flows, make sure wallet supports signMessage so viewing-key registration can be completed before transactions.

UX requirements

  • Show progress during proof generation (onProgress, onProofProgress).
  • Handle stale-root retries gracefully (isRootNotFoundError).
  • Keep circuit files accessible in browser deployments.
  • Ensure viewing-key registration succeeds before transact/swap actions.
  • For privacy history pages, expose explicit cache clear + rescan controls after swaps or failed scans.