Ika Accountsdocs

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

ts
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 walletEthereum, 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 exchangeBitcoin, 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
Deposits0.6% of the amount, inside the quote
Withdrawals0.6% of the amount, inside the quote
Gas on Suinone 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:

ts
// 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.