Skip to main content

Method Signature

align.blockchain.contracts.read(
  params: ContractCall
): Promise<unknown>

Parameters

contractAddress
string
required
Contract address to call
abi
array
required
Contract ABI (only needs the function you’re calling)
method
string
required
Function name to call
args
array
Function arguments (if any)
network
string
required
Network: ethereum, polygon, base, arbitrum

Examples

import Align from "@tolbel/align";

const align = new Align({
  apiKey: process.env.ALIGN_API_KEY!,
  environment: "sandbox",
});

// ERC-20 balanceOf example
const ERC20_ABI = [
  "function balanceOf(address) view returns (uint256)",
  "function decimals() view returns (uint8)",
  "function symbol() view returns (string)",
];

const balance = await align.blockchain.contracts.read({
  contractAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", // USDC
  abi: ERC20_ABI,
  method: "balanceOf",
  args: ["0xWalletAddress..."],
  network: "polygon",
});

console.log(`Balance: ${balance.toString()}`);

Read Multiple Values

const [symbol, decimals, balance] = await Promise.all([
  align.blockchain.contracts.read({
    contractAddress: tokenAddress,
    abi: ERC20_ABI,
    method: "symbol",
    args: [],
    network: "polygon",
  }),
  align.blockchain.contracts.read({
    contractAddress: tokenAddress,
    abi: ERC20_ABI,
    method: "decimals",
    args: [],
    network: "polygon",
  }),
  align.blockchain.contracts.read({
    contractAddress: tokenAddress,
    abi: ERC20_ABI,
    method: "balanceOf",
    args: [walletAddress],
    network: "polygon",
  }),
]);

console.log(`${symbol}: ${formatUnits(balance, decimals)}`);
Read operations are free - they don’t require gas or signing.