Delegate token spending to a third party with an amount cap. The delegate can transfer tokens on behalf of the owner up to the approved amount, without the owner signing each transaction.
Use this file to discover all available pages before exploring further.
Delegation with Light Token works similar to SPL.
When you approve a delegate, you’re authorizing a specific account to transfer tokens on your behalf:
Owner retains custody: You still own the tokens and can transfer or revoke at any time. Delegation is non-custodial.
Capped spending: The delegate can spend tokens up to the limit, but cannot access or drain the account beyond the approved amount.
Single delegate per account: Each token account can only have one active delegate. The owner can revoke at any time.
New approval replaces old: Approving a new delegate automatically revokes the previous one
Once approved, the delegate can transfer tokens on behalf of the owner. The delegate is the transaction authority. Only the delegate and fee payer sign; the owner’s signature is not required.transferInterface takes a recipient wallet address and creates the recipient’s associated token account internally. For delegated transfers, pass the source token-account owner as owner (pubkey) and the delegate as authority (signer). Do not use removed InterfaceOptions.owner — there is no { owner: ... } options bag for this flow.
import { transferInterface } from "@lightprotocol/compressed-token/unified";const tx = await transferInterface( rpc, payer, senderAta, mint, recipient.publicKey, // recipient wallet (associated token account created internally) owner.publicKey, // source account owner (does not sign) delegate, // delegate authority (signer) 200_000 // must be within approved cap);console.log("Delegated transfer:", tx);
createTransferInterfaceInstructions returns TransactionInstruction[][] for manual transaction control. Pass the token-account owner pubkey as the flat owner argument; for delegate-signed transactions, set options.delegatePubkey.
---description: Integrate light-token APIs for stablecoin paymentsallowed-tools: Bash, Read, Write, Edit, Glob, Grep, WebFetch, AskUserQuestion, Task, TaskCreate, TaskGet, TaskList, TaskUpdate, TaskOutput, mcp__deepwiki, mcp__zkcompression---## Integrate light-token APIs for stablecoin paymentsContext:- Guide: https://zkcompression.com/light-token/payments/overview- Skills and resources index: https://zkcompression.com/skill.md- SPL to Light reference: https://zkcompression.com/api-reference/solana-to-light-comparison- Dedicated skill: https://github.com/Lightprotocol/skills/tree/main/skills/payments- Packages: @lightprotocol/compressed-token, @lightprotocol/stateless.js- Import from @lightprotocol/compressed-token/unified for all interface APIsSPL → Light Token API mapping:| Operation | SPL | Light Token || Receive | getOrCreateAssociatedTokenAccount() | createLoadAtaInstructions() / loadAta() || Transfer | createTransferInstruction() | createTransferInterfaceInstructions() || Delegated Transfer | transfer() (delegate signs) | transferInterface(..., ownerPubkey, delegateSigner, ...) || Get Balance | getAccount() | getAtaInterface() || Tx History | getSignaturesForAddress() | getSignaturesForOwnerInterface() || Wrap SPL | N/A | createWrapInstruction() / wrap() || Unwrap | N/A | createUnwrapInstructions() / unwrap() |### 1. Index project- Grep `@solana/spl-token|@lightprotocol|createTransferInstruction|getAccount|Connection|Keypair|stablecoin|payment` across src/- Glob `**/*.ts` and `**/*.tsx` for project structure- Identify: RPC setup, existing token operations, payment flow, wallet signing pattern- Check package.json for existing @lightprotocol/* or @solana/spl-token dependencies- Task subagent (Grep/Read/WebFetch) if project has multiple packages to scan in parallel### 2. Read references- WebFetch the guide above — review Instruction and Action tabs for each operation- WebFetch skill.md — check for a dedicated skill and resources matching this task- TaskCreate one todo per phase below to track progress### 3. Clarify intention- AskUserQuestion: what is the goal? (new payment integration, migrate existing SPL payment flow, add alongside existing SPL)- AskUserQuestion: which operations? (receive, send, balance, history, wrap, unwrap — or all)- AskUserQuestion: instruction-level API (build your own transactions) or action-level API (high-level, fewer lines)?- Summarize findings and wait for user confirmation before implementing### 4. Create plan- Based on steps 1–3, draft an implementation plan: which files to modify, what code to add, dependency changes- Verify existing connection/signer setup is compatible (createRpc with ZK Compression endpoint)- Key pattern: import from `@lightprotocol/compressed-token/unified` for all interface APIs- If anything is unclear or ambiguous, loop back to step 3 (AskUserQuestion)- Present the plan to the user for approval before proceeding### 5. Implement- Add deps if missing: Bash `npm install @lightprotocol/compressed-token @lightprotocol/stateless.js`- Set up RPC: `createRpc(RPC_ENDPOINT)` with a ZK Compression endpoint (Helius, Triton)- Import from `@lightprotocol/compressed-token/unified` for the interface APIs- Follow the guide and the approved plan- Write/Edit to create or modify files- TaskUpdate to mark each step done### 6. Verify- Bash `tsc --noEmit`- Bash run existing test suite if present- TaskUpdate to mark complete### Tools- mcp__zkcompression__SearchLightProtocol("<query>") for API details- mcp__deepwiki__ask_question("Lightprotocol/light-protocol", "<q>") for architecture- Task subagent with Grep/Read/WebFetch for parallel lookups- TaskList to check remaining work### ResourcesGuides:- Basic payment: https://zkcompression.com/light-token/payments/basic-payment- Batch payments: https://zkcompression.com/light-token/payments/batch-payments- Payment with memo: https://zkcompression.com/light-token/payments/payment-with-memo- Receive payments: https://zkcompression.com/light-token/payments/receive-payments- Verify payments: https://zkcompression.com/light-token/payments/verify-payments- Verify recipient address: https://zkcompression.com/light-token/payments/verify-recipient-address- Spend permissions: https://zkcompression.com/light-token/payments/spend-permissions- Wrap and unwrap: https://zkcompression.com/light-token/payments/wrap-unwrap- Production readiness: https://zkcompression.com/light-token/payments/production-readiness- FAQ: https://zkcompression.com/faq- Sign with Privy: https://zkcompression.com/light-token/wallets/privy- Sign with Wallet Adapter: https://zkcompression.com/light-token/wallets/wallet-adapter- Gasless transactions: https://zkcompression.com/light-token/wallets/gasless-transactionsExamples:- All payments: https://github.com/Lightprotocol/examples-light-token/tree/main/toolkits/payments- Send (instruction): https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/send/basic-send-instruction.ts- Send (action): https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/send/basic-send-action.ts- Batch send: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/send/batch-send.ts- Payment with memo: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/send/payment-with-memo.ts- Receive: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/receive/receive.ts- Get balance: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/verify/get-balance.ts- Get history: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/verify/get-history.ts- Verify address: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/verify/verify-address.ts- Wrap: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/interop/wrap.ts- Unwrap: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/payments/interop/unwrap.ts- Privy (Node.js): https://github.com/Lightprotocol/examples-light-token/tree/main/toolkits/sign-with-privy/nodejs- Privy (React): https://github.com/Lightprotocol/examples-light-token/tree/main/toolkits/sign-with-privy/react- Wallet Adapter (React): https://github.com/Lightprotocol/examples-light-token/tree/main/toolkits/sign-with-wallet-adapter/react- Gasless transfer: https://github.com/Lightprotocol/examples-light-token/blob/main/toolkits/gasless-transactions/typescript/gasless-transfer.ts