Skip to main content
Read data from smart contracts and execute write operations using Para’s wallet infrastructure.

Prerequisites

You need Web3 libraries configured with Para authentication.

Read Contract Data

import { ethers } from "ethers";

const CONTRACT_ABI = [
  "function balanceOf(address owner) view returns (uint256)",
  "function totalSupply() view returns (uint256)",
  "function name() view returns (string)",
  "function symbol() view returns (string)",
  "function decimals() view returns (uint8)"
];

async function readContractData(
  provider: ethers.Provider,
  contractAddress: string,
  userAddress: string
) {
  const contract = new ethers.Contract(
    contractAddress,
    CONTRACT_ABI,
    provider
  );

  const [balance, totalSupply, name, symbol, decimals] = await Promise.all([
    contract.balanceOf(userAddress),
    contract.totalSupply(),
    contract.name(),
    contract.symbol(),
    contract.decimals()
  ]);

  return {
    balance: ethers.formatUnits(balance, decimals),
    totalSupply: ethers.formatUnits(totalSupply, decimals),
    name,
    symbol,
    decimals
  };
}

Write Contract Data

const STAKING_ABI = [
  "function stake(uint256 amount) payable",
  "function unstake(uint256 amount)",
  "function getStakedBalance(address user) view returns (uint256)",
  "event Staked(address indexed user, uint256 amount)",
  "event Unstaked(address indexed user, uint256 amount)"
];

async function stakeTokens(
  signer: any,
  contractAddress: string,
  amount: string,
  decimals: number
) {
  const contract = new ethers.Contract(contractAddress, STAKING_ABI, signer);
  const parsedAmount = ethers.parseUnits(amount, decimals);

  const tx = await contract.stake(parsedAmount);
  await tx.wait();

  const newBalance = await contract.getStakedBalance(await signer.getAddress());

  return {
    hash: tx.hash,
    stakedAmount: ethers.formatUnits(newBalance, decimals)
  };
}

Next Steps