unify-balance

Generate TypeScript code for cross-chain USDC unified balance deposits, spends, and queries via Circle SDKs.

Updated Mar 18, 2026
One-click install
npx skills add https://github.com/Surojit012/CMO --skill unify-balance-surojit012
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: unify-balance
Source: https://github.com/Surojit012/CMO/tree/main/.agents/skills/unify-balance
Command: npx skills add https://github.com/Surojit012/CMO --skill unify-balance-surojit012

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @circle-fin/app-kit, @circle-fin/unified-balance-kit, @circle-fin/adapter-viem-v2, @circle-fin/adapter-solana, @circle-fin/adapter-circle-wallets, viem, @solana/web3.js, and includes references (resource) components.

What problem does it solve? Managing USDC spread across multiple blockchains requires handling complex cross-chain orchestration like contract interactions, EIP-712 signing, and attestation polling. This Skill generates server-side TypeScript code that abstracts all of that into simple deposit, spend, and balance query calls using Circle's App Kit or Unified Balance Kit SDKs. ## Core Features & Use Cases - Unified Balance Operations: Generate code for depositing USDC into a unified balance, spending to any supported chain, and querying aggregated balances with per-chain breakdowns. - Multi-Adapter Support: Covers Viem (EVM private key), Solana, Circle developer-controlled wallets, and multichain EVM+Solana adapter configurations. - Delegate & Withdrawal Flows: Implements delegate lifecycle (addDelegate, depositFor, delegate spend) and the two-step 7-day delayed fund removal process. - Use Case: A developer building a chain-abstracted payment flow needs to let users deposit USDC on Base and spend it to a recipient on Arbitrum. The Skill walks through SDK and adapter selection, then generates ready-to-review TypeScript with testnet defaults and strict security rules. ## Quick Start Ask the assistant to generate code that deposits 10 USDC from Base Sepolia into a unified balance and then spends 5 USDC to a recipient on Arc Testnet using the Viem adapter.

Frequently Asked Questions about unify-balance

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I deposit USDC into a unified balance across chains?

Install @circle-fin/app-kit with @circle-fin/adapter-viem-v2, create a Viem adapter from your private key, and call kit.unifiedBalance.deposit with the source chain and amount. The SDK handles approval and transfer in one call using EIP-3009 by default.

What is the difference between Circle App Kit and Unified Balance Kit?

App Kit is the all-inclusive SDK covering unified balance, swap, bridge, and send in one package. Unified Balance Kit provides the same unified balance API surface in a lighter package for unified-balance-only use cases. Neither requires a kit key for unified balance operations.

Does Unified Balance Kit support Solana?

Yes, Solana is supported via the @circle-fin/adapter-solana package with a base58 private key. You can deposit from Solana, spend from Solana allocations, and even combine EVM and Solana sources in a single multichain spend.

How do I withdraw USDC from a unified balance?

Withdrawal is a two-step process with a mandatory 7-day delay. Call initiateRemoveFund to start the delayed withdrawal on a specific chain, then call removeFund after the activation period to transfer USDC back to your wallet.

When should I use Gateway directly instead of Unified Balance Kit?

Use direct Gateway integration when you need browser-wallet flows with wagmi or EIP-1193 providers, since Unified Balance Kit is server-side only. It also fits when you need custom control over individual CCTP steps like approve, burn, attestation fetching, and minting.

How do delegates work for spending from another account's balance?

The account owner calls addDelegate per chain to authorize a delegate address, then the delegate signs spend calls with sourceAccount set to the owner's address. Check getDelegateStatus first and only spend once it returns ready.