// Supply 0.5 USDC
const poolAbi = parseAbi([
"function supply(address asset,uint256 amount,address onBehalfOf,uint16 referralCode)",
]);
const { request: supplyReq } = await publicClient.simulateContract({
address: AAVE_POOL as `0x${string}`,
abi: poolAbi,
functionName: "supply",
args: [
USDC_ADDRESS,
parseUnits("0.5", 6),
(walletClient.account as Account).address,
0,
],
account: walletClient.account as Account,
});
// The USDC transfer path & proxy layers sometimes make estimateGas under-shoot
// Adding a buffer to avoid occasional out-of-gas errors
const gas = await publicClient.estimateContractGas({
address: AAVE_POOL as `0x${string}`,
abi: poolAbi,
functionName: "supply",
args: [
USDC_ADDRESS,
parseUnits("0.5", 6),
(walletClient.account as Account).address,
0,
],
account: walletClient.account as Account,
});
const gasWithBuffer = (gas * 130n) / 100n;
const supplyHash = await walletClient.writeContract({
...supplyReq,
gas: gasWithBuffer,
});
const receiptSupply = await publicClient.waitForTransactionReceipt({
hash: supplyHash,
});
console.log("Supply transaction:", `https://basescan.org/tx/${supplyHash}`, receiptSupply.status);