Skip to main content

Use deposit-address flows

Use this path when your app manages a Liquidium profile and asks the user to send funds to a deposit target.

Supported use cases

Use a deposit-address flow for the following app needs:

NeedUse
Profile-level positionsThe user returns to the same Liquidium profile across sessions
Manual transfersYour app shows an address or ICRC account and lets the user send funds outside the SDK
Dashboard flowsThe user supplies, borrows, withdraws, and repays from one account

Request a deposit target

Call client.lending.supply(...) with the transfer mechanism:

import { Chain } from "@liquidium/client";

const supplyFlow = await client.lending.supply({
profileId,
poolId,
action: "deposit",
chain: Chain.BTC,
mechanism: "transfer",
});

console.log("Send funds to", supplyFlow.target.address);

mechanism: "transfer" is optional because transfer is the default. Set it when your app exposes an explicit deposit-address versus contract-interaction choice. When the flow needs a transaction ID, call supplyFlow.submit(...) after the user broadcasts the transfer.

Manual transfer requests do not include an amount, so the SDK cannot validate the eventual transaction value. Validate deposits with getMinimumDepositAmount(asset) before showing the target:

AssetMinimum deposit
BTC / ckBTC5_100n sats (0.000051 BTC)
ETH / ckETH5_000_000_000_000_000n wei (0.005 ETH)
ICP10_000n e8s (0.0001 ICP)
USDC / ckUSDC1_000_000n base units (1 USDC)
USDT / ckUSDT1_000_000n base units (1 USDT)

For manual deposits, account for the inflow fee returned by client.lending.estimateInflowFee(...). The Liquidium app displays the product floor plus that fee. For external USDT deposit addresses, it uses a separate 1.5 USDT floor before it adds fees. This route-specific guidance does not change the SDK's 1 USDT product minimum.