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

interface DepositTxData {
  /** Contract ABI for the deposit function */
  abi: Abi;
  /** Depositor contract address */
  address: Address;
  /** Function name to call */
  functionName: string;
  /** Encoded function arguments */
  args: unknown[];
  /** Chain ID for the transaction */
  chainId: number;
}

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()