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

const txData = await prepareDepositTxData({
  yieldType: YieldType.CORE,
  depositAsset: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  depositAmount: "1000",
  to: "0x...",
  chainId: 1,
});

Parameters

ParameterTypeRequiredDescription
yieldTypeYieldTypeYesYield strategy type (CORE, TREASURY, or FRONTIER)
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%)
partnerCodestringNoPartner code for fee attribution
interface PrepareDepositParams {
  /** Yield strategy type (e.g., YieldType.CORE) */
  yieldType: YieldType;
  /** 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;
  /** Partner code for fee attribution */
  partnerCode?: 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 { prepareDepositTxData, YieldType } from "@paxoslabs/amplify-sdk";

const { sendTransaction } = usePrivy();

// After approval is confirmed...
const txData = await prepareDepositTxData({
  yieldType: YieldType.CORE,
  depositAsset: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  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 CodeDescriptionResolution
SDK_NOT_INITIALIZEDSDK not initializedCall initAmplifySDK() first
VAULT_NOT_FOUNDNo vault matches parametersVerify yieldType, token, chainId
INSUFFICIENT_ALLOWANCEToken not approvedCall approval first or use permit flow
INVALID_AMOUNTAmount is zero or negativeProvide valid positive amount