Skip to main content
Prepares the transaction data for executing a deposit after the user has approved token spending. Use this for the approval flow or when allowance is already sufficient.
For most use cases, use the unified deposit workflow which handles authorization automatically.

Import

import { prepareDepositTxData } from '@paxoslabs/amplify-sdk'

Usage

// First discover the vault
const [vault] = await getVaultsByConfig({
  yieldType: YieldType.CORE,
  chainId: 1,
  depositAssetAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
})

const txData = await prepareDepositTxData({
  vaultName: vault.name,
  depositAsset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
  depositAmount: '1000',
  to: '0x...',
  chainId: 1,
})

Parameters

ParameterTypeRequiredDescription
vaultNamestringYesVault name from AmplifyVault.name (e.g. from getVaultsByConfig())
depositAssetAddressYesToken contract address to deposit
depositAmountstringYesAmount to deposit as decimal string (e.g., "100.50")
toAddressYesRecipient address for vault shares
chainIdnumberYesBlockchain network ID
slippagenumberNoSlippage tolerance in basis points (default: 50 = 0.5%)
distributorCodestringNoDistributor code for fee attribution
interface PrepareDepositTxDataParams {
  /** Vault name (from AmplifyVault.name) */
  vaultName: string
  /** Token contract address to deposit */
  depositAsset: Address
  /** Amount to deposit as decimal string (e.g., "100.25") */
  depositAmount: string
  /** Recipient address for vault shares */
  to: Address
  /** Blockchain network ID */
  chainId: number
  /** Slippage in basis points (default: 50 = 0.5%) */
  slippage?: number
  /** Distributor code for fee attribution */
  distributorCode?: string
}

Return Type

Returns a discriminated union based on the vault’s configuration. Use depositType or the type guards isStandardDeposit() / isKytDeposit() to narrow.
type DepositTxData = StandardDepositTxData | KytDepositTxData;

interface StandardDepositTxData {
  depositType: "standard";
  abi: Abi;
  address: Address;
  functionName: "deposit";
  args: readonly [Address, bigint, bigint, Address, Hex];
  chainId: number;
}

interface KytDepositTxData {
  depositType: "kyt";
  abi: Abi;
  address: Address;
  functionName: "deposit";
  args: readonly [Address, bigint, bigint, Address, Hex, Attestation];
  chainId: number;
}
KYT routing is automatic — the SDK checks vault.enterpriseConfig.predicatePolicyId and returns the correct variant. Most consumers can ignore depositType and pass the result directly to writeContract.

Examples

import { encodeFunctionData } from "viem";
import { usePrivy } from "@privy-io/react-auth";
import {
  getVaultsByConfig,
  prepareDepositTxData,
  YieldType,
} from "@paxoslabs/amplify-sdk";

const { sendTransaction } = usePrivy();

const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";

// Discover vault
const [vault] = await getVaultsByConfig({
  yieldType: YieldType.CORE,
  chainId: 1,
  depositAssetAddress: USDC,
});

// After approval is confirmed...
const txData = await prepareDepositTxData({
  vaultName: vault.name,
  depositAsset: USDC,
  depositAmount: "1000",
  to: userAddress,
  chainId: 1,
});

await sendTransaction({
  chainId: txData.chainId,
  to: txData.address,
  data: encodeFunctionData({
    abi: txData.abi,
    functionName: txData.functionName,
    args: txData.args,
  }),
});

Slippage Configuration

The default slippage is 50 basis points (0.5%). Adjust for volatile conditions:
// 1% slippage for higher tolerance
const txData = await prepareDepositTxData({
  ...params,
  slippage: 100,
})

// 0.1% slippage for tighter tolerance
const txData = await prepareDepositTxData({
  ...params,
  slippage: 10,
})

Error Handling

Error Message PatternDescriptionResolution
"SDK not initialized"SDK not initializedCall initAmplifySDK() first
"Vault not found"No vault matches vaultNameVerify vault name via getVaultsByConfig()
"Asset metadata not found"Token not in asset cacheVerify token is supported via getSupportedAssets()