Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.paxoslabs.com/llms.txt

Use this file to discover all available pages before exploring further.

prepareWithdrawTxData assembles calldata that burns shares and returns the want asset in one transaction. Use it when the vault advertises enough on-chain liquidity for immediate redemptions.

Helper Signature

import { prepareWithdrawTxData } from "@paxoslabs/amplify-sdk";

const tx = await prepareWithdrawTxData({
  yieldType, // e.g. YieldType.CORE
  shareAmount, // decimal string of shares to burn
  wantAssetAddress, // token address users receive
  chainId,
  recipientAddress, // recipient wallet
  slippage, // optional bps override (default: 100)
});
  • Returns { abi, address, functionName: 'bulkWithdraw', args, chainId }.
  • args order: [wantAssetAddress, shareAmountInBaseUnits, minimumAssetsOut, userAddress].
  • No ERC-20 approvals are required; the vault burns shares directly.

React with Privy

import { encodeFunctionData } from "viem";
import { mainnet } from "viem/chains";
import { prepareWithdrawTxData, YieldType } from "@paxoslabs/amplify-sdk";
import { usePrivy, useWallets } from "@privy-io/react-auth";

const { sendTransaction } = usePrivy();
const { wallets } = useWallets();
const wallet = wallets[0];
if (!wallet) {
  throw new Error("Connect a wallet before preparing transactions.");
}

const owner = wallet.address as `0x${string}`;

const tx = await prepareWithdrawTxData({
  yieldType: YieldType.CORE,
  shareAmount: "5.0",
  wantAssetAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
  chainId: mainnet.id,
  userAddress: owner,
  slippage: 75,
});

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

React with wagmi

import { prepareWithdrawTxData, YieldType } from "@paxoslabs/amplify-sdk";
import { useAccount, useWriteContract } from "wagmi";

const { address: account, chainId } = useAccount();
const { writeContractAsync } = useWriteContract();
if (!account || !chainId) {
  throw new Error("Connect a wallet before preparing transactions.");
}

const tx = await prepareWithdrawTxData({
  yieldType: YieldType.CORE,
  shareAmount: "5.0",
  wantAssetAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
  chainId,
  userAddress: account,
  slippage: 75,
});

await writeContractAsync({ ...tx, account });

React with viem

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";
import { prepareWithdrawTxData, YieldType } from "@paxoslabs/amplify-sdk";

// ethereum is window.ethereum from an injected wallet.
const [account] = (await ethereum.request({
  method: "eth_requestAccounts",
})) as `0x${string}`[];

const client = createWalletClient({
  account,
  chain: mainnet,
  transport: custom(ethereum),
});

const tx = await prepareWithdrawTxData({
  yieldType: YieldType.CORE,
  shareAmount: "5.0",
  wantAssetAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
  chainId: mainnet.id,
  userAddress: account,
  slippage: 75,
});

await client.writeContract({ ...tx, account });
Handle errors by catching APIError; the endpoint field lets you surface actionable error messaging when vaults, chains, or solver slippage lookups are unavailable.***