import {
getVaultsByConfig,
prepareWithdrawalAuthorization,
isWithdrawApprovalAuth,
prepareWithdrawal,
YieldType,
} from "@paxoslabs/amplify-sdk";
import { encodeFunctionData } from "viem";
async function batchedWithdraw(safeAddress: `0x${string}`) {
const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
const withdrawAmount = "1.0";
const [vault] = await getVaultsByConfig({
yieldType: YieldType.CORE,
chainId: 1,
});
// Get authorization (default: APPROVAL for smart wallets)
const auth = await prepareWithdrawalAuthorization({
vaultName: vault.name,
wantAsset: USDC,
withdrawAmount,
userAddress: safeAddress,
chainId: 1,
});
const calls = [];
// Add approval call
if (isWithdrawApprovalAuth(auth)) {
calls.push({
to: auth.txData.address,
data: encodeFunctionData({
abi: auth.txData.abi,
functionName: auth.txData.functionName,
args: auth.txData.args,
}),
value: 0n,
});
}
// Add withdrawal call
const withdrawTx = await prepareWithdrawal({
vaultName: vault.name,
wantAsset: USDC,
userAddress: safeAddress,
chainId: 1,
withdrawAmount,
});
calls.push({
to: withdrawTx.address,
data: encodeFunctionData({
abi: withdrawTx.abi,
functionName: withdrawTx.functionName,
args: withdrawTx.args,
}),
value: 0n,
});
// Execute both atomically via smart wallet
return calls;
}