- Discover chain-specific vaults/assets
- Route users to supported chains
- Execute chain-correct deposit/withdraw flows
Discover by Chain
Copy
Ask AI
import { fetchVaults, fetchSupportedAssets, YieldType } from "@paxoslabs/amplify-sdk";
const chainId = 1;
const vaults = await fetchVaults({
chainId,
yieldType: YieldType.CORE,
});
const assets = await fetchSupportedAssets({
chains: [chainId],
yieldType: YieldType.CORE,
});
Chain Guard Before Write
Copy
Ask AI
function assertChain(expected: number, connected: number) {
if (expected !== connected) {
throw new Error(`Wrong network: expected ${expected}, got ${connected}`);
}
}
Deposit Flow (Chain-Safe)
Copy
Ask AI
import {
prepareDepositAuthorization,
prepareDeposit,
isPermitAuth,
isApprovalAuth,
} from "@paxoslabs/amplify-sdk";
async function depositOnChain(params: {
chainId: number;
user: `0x${string}`;
asset: `0x${string}`;
amount: string;
}) {
const auth = await prepareDepositAuthorization({
yieldType: "CORE",
depositAsset: params.asset,
depositAmount: params.amount,
to: params.user,
chainId: params.chainId,
});
if (isPermitAuth(auth)) {
const signature = await walletClient.signTypedData({
account: params.user,
...auth.permitData,
});
const prepared = await prepareDeposit({
yieldType: "CORE",
depositAsset: params.asset,
depositAmount: params.amount,
to: params.user,
chainId: params.chainId,
signature,
deadline: auth.permitData.message.deadline,
});
return walletClient.writeContract(prepared.txData);
}
if (isApprovalAuth(auth)) {
const approvalHash = await walletClient.writeContract(auth.txData);
await publicClient.waitForTransactionReceipt({ hash: approvalHash });
}
const prepared = await prepareDeposit({
yieldType: "CORE",
depositAsset: params.asset,
depositAmount: params.amount,
to: params.user,
chainId: params.chainId,
});
return walletClient.writeContract(prepared.txData);
}
Withdrawal Flow (Chain-Safe)
Copy
Ask AI
import {
prepareWithdrawalAuthorization,
prepareWithdrawal,
isWithdrawApprovalAuth,
} from "@paxoslabs/amplify-sdk";
async function withdrawOnChain(params: {
chainId: number;
user: `0x${string}`;
wantAsset: `0x${string}`;
amount: string;
}) {
const auth = await prepareWithdrawalAuthorization({
yieldType: "CORE",
wantAsset: params.wantAsset,
withdrawAmount: params.amount,
userAddress: params.user,
chainId: params.chainId,
});
if (isWithdrawApprovalAuth(auth)) {
const approvalHash = await walletClient.writeContract(auth.txData);
await publicClient.waitForTransactionReceipt({ hash: approvalHash });
}
const txData = await prepareWithdrawal({
yieldType: "CORE",
wantAsset: params.wantAsset,
withdrawAmount: params.amount,
userAddress: params.user,
chainId: params.chainId,
});
return walletClient.writeContract(txData);
}