import {
getVaultsByConfig,
prepareDepositAuthorization,
prepareDeposit,
isPermitAuth,
isApprovalAuth,
isAlreadyApprovedAuth,
YieldType,
} from '@paxoslabs/amplify-sdk'
async function depositOnChain(params: {
chainId: number
user: `0x${string}`
asset: `0x${string}`
amount: string
}) {
const [vault] = await getVaultsByConfig({
yieldType: YieldType.CORE,
chainId: params.chainId,
depositAssetAddress: params.asset,
})
const depositParams = {
vaultName: vault.name,
depositAsset: params.asset,
depositAmount: params.amount,
to: params.user,
chainId: params.chainId,
}
const auth = await prepareDepositAuthorization(depositParams)
if (isPermitAuth(auth)) {
const signature = await walletClient.signTypedData({
account: params.user,
...auth.permitData,
})
const prepared = await prepareDeposit({
...depositParams,
signature,
deadline: auth.permitData.message.deadline,
})
return walletClient.writeContract({
address: prepared.txData.address,
abi: prepared.txData.data.abi,
functionName: prepared.txData.data.functionName,
args: prepared.txData.data.args,
})
}
if (isApprovalAuth(auth)) {
const approvalHash = await walletClient.writeContract(auth.txData)
await publicClient.waitForTransactionReceipt({ hash: approvalHash })
}
const prepared = await prepareDeposit(depositParams)
return walletClient.writeContract(prepared.txData)
}