import { encodeFunctionData } from "viem";
import { mainnet } from "viem/chains";
import {
prepareApproveWithdrawTxData,
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 wantAssetAddress = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" as `0x${string}`; // USDC
const chainId = mainnet.id;
// Step 1: Approve withdrawal
const approval = await prepareApproveWithdrawTxData({
chainId,
wantAssetAddress,
yieldType: YieldType.PRIME,
});
await sendTransaction({
chainId,
to: approval.address,
data: encodeFunctionData({
abi: approval.abi,
functionName: approval.functionName,
args: approval.args,
}),
});
// Step 2: Execute withdrawal
const tx = await prepareWithdrawTxData({
yieldType: YieldType.PRIME,
wantAssetAddress,
offerAmount: "5.0",
chainId,
});
const { abi, functionName, args } = tx;
await sendTransaction({
chainId: tx.chainId,
to: tx.address,
data: encodeFunctionData({ abi, functionName, args }),
});