Prerequisites
You need Web3 libraries configured with Para authentication.Setup Web3 Libraries
Query ETH Balance
- Ethers.js
- Viem
- Wagmi
Copy
Ask AI
import { ethers } from "ethers";
import { ParaEthersSigner } from "@getpara/ethers-v6-integration";
async function getETHBalance(signer: ParaEthersSigner, provider: ethers.Provider) {
const address = await signer.getAddress();
const balance = await provider.getBalance(address);
const formattedBalance = ethers.formatEther(balance);
console.log(`ETH Balance: ${formattedBalance} ETH`);
return {
wei: balance.toString(),
ether: formattedBalance
};
}
Copy
Ask AI
import { formatEther } from "viem";
import { createParaAccount } from "@getpara/viem-v2-integration";
async function getETHBalance(publicClient: any, para: any) {
const account = await createParaAccount(para);
const balance = await publicClient.getBalance({
address: account.address
});
const formattedBalance = formatEther(balance);
console.log(`ETH Balance: ${formattedBalance} ETH`);
return {
wei: balance.toString(),
ether: formattedBalance
};
}
Copy
Ask AI
import { useBalance, useAccount } from "wagmi";
function ETHBalance() {
const { address } = useAccount();
const { data, isError, isLoading } = useBalance({
address: address
});
if (isLoading) return <div>Loading balance...</div>;
if (isError) return <div>Error fetching balance</div>;
return (
<div>
<p>ETH Balance: {data?.formatted} {data?.symbol}</p>
<p>Wei: {data?.value.toString()}</p>
</div>
);
}
Query ERC-20 Token Balance
- Ethers.js
- Viem
- Wagmi
Copy
Ask AI
import { ethers } from "ethers";
const ERC20_ABI = [
"function balanceOf(address owner) view returns (uint256)",
"function decimals() view returns (uint8)",
"function symbol() view returns (string)"
];
async function getTokenBalance(
signer: any,
tokenAddress: string,
provider: ethers.Provider
) {
const contract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
const address = await signer.getAddress();
const [balance, decimals, symbol] = await Promise.all([
contract.balanceOf(address),
contract.decimals(),
contract.symbol()
]);
const formattedBalance = ethers.formatUnits(balance, decimals);
console.log(`${symbol} Balance: ${formattedBalance}`);
return {
raw: balance.toString(),
formatted: formattedBalance,
symbol,
decimals
};
}
Copy
Ask AI
import { formatUnits } from "viem";
const ERC20_ABI = [
{
name: "balanceOf",
type: "function",
stateMutability: "view",
inputs: [{ name: "owner", type: "address" }],
outputs: [{ type: "uint256" }]
},
{
name: "decimals",
type: "function",
stateMutability: "view",
inputs: [],
outputs: [{ type: "uint8" }]
},
{
name: "symbol",
type: "function",
stateMutability: "view",
inputs: [],
outputs: [{ type: "string" }]
}
] as const;
async function getTokenBalance(
publicClient: any,
account: any,
tokenAddress: `0x${string}`
) {
const [balance, decimals, symbol] = await Promise.all([
publicClient.readContract({
address: tokenAddress,
abi: ERC20_ABI,
functionName: "balanceOf",
args: [account.address]
}),
publicClient.readContract({
address: tokenAddress,
abi: ERC20_ABI,
functionName: "decimals"
}),
publicClient.readContract({
address: tokenAddress,
abi: ERC20_ABI,
functionName: "symbol"
})
]);
const formattedBalance = formatUnits(balance, decimals);
console.log(`${symbol} Balance: ${formattedBalance}`);
return {
raw: balance.toString(),
formatted: formattedBalance,
symbol,
decimals
};
}
Copy
Ask AI
import { useAccount, useContractReads } from "wagmi";
const ERC20_ABI = [
{
name: "balanceOf",
type: "function",
stateMutability: "view",
inputs: [{ name: "owner", type: "address" }],
outputs: [{ type: "uint256" }]
},
{
name: "decimals",
type: "function",
stateMutability: "view",
inputs: [],
outputs: [{ type: "uint8" }]
},
{
name: "symbol",
type: "function",
stateMutability: "view",
inputs: [],
outputs: [{ type: "string" }]
}
] as const;
function TokenBalance({ tokenAddress }: { tokenAddress: `0x${string}` }) {
const { address } = useAccount();
const { data, isLoading } = useContractReads({
contracts: [
{
address: tokenAddress,
abi: ERC20_ABI,
functionName: "balanceOf",
args: [address!]
},
{
address: tokenAddress,
abi: ERC20_ABI,
functionName: "decimals"
},
{
address: tokenAddress,
abi: ERC20_ABI,
functionName: "symbol"
}
]
});
if (isLoading) return <div>Loading token balance...</div>;
const balance = data?.[0]?.result;
const decimals = data?.[1]?.result;
const symbol = data?.[2]?.result;
if (!balance || !decimals) return <div>No balance data</div>;
const formatted = (Number(balance) / 10 ** decimals).toFixed(4);
return (
<div>
<p>{symbol} Balance: {formatted}</p>
</div>
);
}