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.***