Prerequisites
You need Web3 libraries configured with Para authentication.Setup Web3 Libraries
Manage Token Allowances
- Ethers.js
- Viem
- Wagmi
Copy
Ask AI
import { ethers } from "ethers";
const ERC20_ABI = [
"function allowance(address owner, address spender) view returns (uint256)",
"function approve(address spender, uint256 amount) returns (bool)",
];
async function checkAllowance(
provider: ethers.Provider,
tokenAddress: string,
owner: string,
spender: string
) {
const contract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
const allowance = await contract.allowance(owner, spender);
return allowance;
}
async function approveToken(
signer: ethers.Signer,
tokenAddress: string,
spender: string,
amount: string
) {
const contract = new ethers.Contract(tokenAddress, ERC20_ABI, signer);
const tx = await contract.approve(spender, ethers.parseEther(amount));
await tx.wait();
return tx;
}
Copy
Ask AI
import { parseEther } from "viem";
const ERC20_ABI = [
{
name: "allowance",
type: "function",
stateMutability: "view",
inputs: [
{ name: "owner", type: "address" },
{ name: "spender", type: "address" },
],
outputs: [{ type: "uint256" }],
},
{
name: "approve",
type: "function",
stateMutability: "nonpayable",
inputs: [
{ name: "spender", type: "address" },
{ name: "amount", type: "uint256" },
],
outputs: [{ type: "bool" }],
},
] as const;
async function checkAllowance(
publicClient: any,
tokenAddress: `0x${string}`,
owner: `0x${string}`,
spender: `0x${string}`
) {
const allowance = await publicClient.readContract({
address: tokenAddress,
abi: ERC20_ABI,
functionName: "allowance",
args: [owner, spender],
});
return allowance;
}
async function approveToken(
walletClient: any,
account: any,
tokenAddress: `0x${string}`,
spender: `0x${string}`,
amount: string
) {
const { request } = await walletClient.simulateContract({
account,
address: tokenAddress,
abi: ERC20_ABI,
functionName: "approve",
args: [spender, parseEther(amount)],
});
const hash = await walletClient.writeContract(request);
return hash;
}
Copy
Ask AI
import { useReadContract, useWriteContract } from "wagmi";
import { parseEther } from "viem";
const ERC20_ABI = [
{
name: "allowance",
type: "function",
stateMutability: "view",
inputs: [
{ name: "owner", type: "address" },
{ name: "spender", type: "address" },
],
outputs: [{ type: "uint256" }],
},
{
name: "approve",
type: "function",
stateMutability: "nonpayable",
inputs: [
{ name: "spender", type: "address" },
{ name: "amount", type: "uint256" },
],
outputs: [{ type: "bool" }],
},
] as const;
function TokenAllowance(
tokenAddress: `0x${string}`,
owner: `0x${string}`,
spender: `0x${string}`
) {
const { data: allowance } = useReadContract({
address: tokenAddress,
abi: ERC20_ABI,
functionName: "allowance",
args: [owner, spender],
});
const { writeContract } = useWriteContract();
return (
<div>
<p>Allowance: {allowance?.toString()}</p>
<button
onClick={() =>
writeContract({
address: tokenAddress,
abi: ERC20_ABI,
functionName: "approve",
args: [spender, parseEther("100")],
})
}
>
Approve 100 Tokens
</button>
</div>
);
}