Deposits and withdrawals
Funds move between the user's Sui account and 36 other chains through NEAR Intents (1Click). Users never touch a bridge.
#The funds panel
await accounts.openFunds({ tab: 'deposit', receive: 'USDC' }); // or receive: 'SUI'
await accounts.openFunds({ tab: 'withdraw' });It resolves when the user closes the panel. The panel renders in a closed shadow root, so your styles can't break it, and it looks the same in every app.
Deposit tab
- A token selector with search, chain filters and the user's balances first, with token and chain logos.
- A live quote: what arrives on Sui, the rate, the fee, and the expected time.
- Deposits from wallets the user connects are one confirmation. Add wallet connects a second wallet just for funding, for example Rabby on Base while signed in with Phantom. Funding wallets never control the account.
- Anything else (another wallet, an exchange, Bitcoin) gets a deposit address and the exact amount to send. The transfer is detected on-chain automatically.
- A status timeline until the funds arrive.
Withdraw tab: USDC or SUI to any supported chain and token. The recipient defaults to the user's own wallet on that chain.
#Supported chains
| Chains | |
|---|---|
| Sent directly from the user's wallet | Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, Gnosis, Berachain, Scroll, Monad, X Layer, Plasma, Abstract, Robinhood Chain, ADI Chain, and Solana |
| Deposit address, any wallet or exchange | Bitcoin, NEAR, TON, Tron, XRP, Dogecoin, Litecoin, Bitcoin Cash, Zcash, Dash, Stellar, Cardano, Aptos, Starknet, Aleo, Movement, Hyperliquid, Fogo |
If a user's wallet doesn't know an EVM chain yet, it is asked to add it before switching.
#Fees
| Fee | |
|---|---|
| Deposits | 0.6% of the amount, inside the quote |
| Withdrawals | 0.6% of the amount, inside the quote |
| Gas on Sui | none for the user |
Every quote returns feeBps, and the panel shows the fee in dollars before the user confirms. Route costs from NEAR Intents are included in the quoted output.
#Programmatic API
For your own UI:
// What would arrive, without creating an order
const quote = await accounts.estimateDeposit({ asset, amount, receiveAsset });
// { amountIn, amountOut, amountInUsd, amountOutUsd, feeBps, timeEstimateSeconds }
// Create the order, send it from the user's wallet, follow it
const deposit = await accounts.deposit({ asset, amount });
await deposit.send();
await deposit.wait({ onUpdate: (order) => setStatus(order.status) });
// Withdraw (the user approves the Sui transaction in their wallet)
const { order, wait } = await accounts.withdraw({ asset, amount, recipient });
await wait();asset is a 1Click asset id. List them with accounts.tokens(), the chains with accounts.chains(), and the user's bridgeable balances across connected wallets with accounts.fundingOptions().
Order statuses: PENDING_DEPOSIT → KNOWN_DEPOSIT_TX → PROCESSING → SUCCESS, or REFUNDED, FAILED, INCOMPLETE_DEPOSIT. Refunds go back to the address the deposit came from.
Very small amounts can fall below a route's minimum. The quote fails with a clear error before anything is sent.