--- title: Deposit on Sui description: Building the deposit transaction block, the objects it touches, and the shared escrow it pays into. --- import { PACKAGE_SUI, ESCROW_SUI } from "/snippets/vars.mdx"; A Sui deposit is a single programmable transaction block that calls `deposit` on the Hular Move package, carrying the quote hash and a `Coin` holding exactly the deposit amount. There is no approval step: coin ownership is authorized by the signature on the transaction itself. The package id is {PACKAGE_SUI}, returned as `router_address` on the quote. The funds land in the shared escrow object ({ESCROW_SUI}), returned as `escrow` by `GetChains`; both ids together are everything needed to build the deposit. ## The transaction block 1. Collect the depositor's coins of `src_token` and merge them if the balance is spread across several objects. 2. Split off exactly `amount_in`. 3. Call `deposit` with the escrow object, the 32-byte quote hash, and the split coin. ``` 0x297a37d4ba1590bbe849eee60cd346b10fc6d020fa39350405609e299bd1217f::hular::deposit(escrow: &mut Escrow, quote_hash: vector, coin: Coin) ``` The type argument `T` is the full coin type of `src_token`. The only accepted token on Sui is native USDC, so `src_token` always equals `bridge_token_src`: there are no swap-first deposits and no native SUI deposits. Gasless deposits are not available on Sui. ## With the SDK `buildSuiDeposit` paginates the depositor's coins, merges and splits them, and assembles the move call. It returns a `Transaction` ready for a wallet to sign; the wallet estimates the gas budget. ```ts import { buildSuiDeposit, createChainAdapter } from "@mayanfinance/hular-sdk"; const transaction = await buildSuiDeposit({ rpcUrl, packageId: quote.orderParams.routerAddress, escrowObject: chainStatus.escrow, owner: wallet.address, coinType: quote.orderParams.srcToken, amount: BigInt(quote.orderParams.amountIn), quoteHash: quote.quoteHash, }); ``` Or let the adapter handle it, which is the same path the other chains take: ```ts const adapter = createChainAdapter(client, chainStatus); const [deposit] = await adapter.steps(wallet, quote.quoteHash, quote.orderParams); await deposit.run(); ``` Sui deposits are always a single step. ## Confirmation The transaction digest is the order's source transaction hash. Sui checkpoints are final: the deposit is picked up as soon as its transaction lands in a checkpoint, and one confirmation is all that is ever required. Nothing else is submitted by the user. Move to [Track an order](/integration/track).