Reading Blockchain Data — Web3

Reading Blockchain Data Membaca data dari blockchain adalah operasi gratis (tidak butuh gas). Kamu bisa membaca state variables, events/logs, dan melakukan…

Reading Blockchain Data

Membaca data dari blockchain adalah operasi gratis (tidak butuh gas). Kamu bisa membaca state variables, events/logs, dan melakukan batch reads dengan multicall.

Membaca State Variables

// Setiap public variable di Solidity otomatis punya getter
// contract: uint256 public totalSupply;

const totalSupply = await contract.totalSupply();
const owner = await contract.owner();
const name = await contract.name();

Events & Logs

Events adalah cara smart contract "berkomunikasi" dengan dunia luar. Setelah transaksi berhasil, events disimpan di transaction logs.

// Solidity:
// event Transfer(address indexed from, address indexed to, uint256 value);

// ethers.js — Query past events
const filter = contract.filters.Transfer(null, userAddress);
const events = await contract.queryFilter(filter, -1000); // last 1000 blocks

events.forEach((event) => {
  console.log({
    from: event.args.from,
    to: event.args.to,
    value: ethers.formatUnits(event.args.value, 18),
    block: event.blockNumber,
    txHash: event.transactionHash,
  });
});

// Listen to real-time events
contract.on("Transfer", (from, to, value, event) => {
  console.log(`${from} → ${to}: ${ethers.formatUnits(value, 18)}`);
});

Multicall — Batch Multiple Reads

Daripada membuat 100 request terpisah, gunakan multicall untuk menggabungkan semuanya dalam satu RPC call.

// viem multicall (built-in!)
const results = await publicClient.multicall({
  contracts: [
    {
      address: tokenAddress,
      abi: erc20Abi,
      functionName: "balanceOf",
      args: [user1],
    },
    {
      address: tokenAddress,
      abi: erc20Abi,
      functionName: "balanceOf",
      args: [user2],
    },
    {
      address: tokenAddress,
      abi: erc20Abi,
      functionName: "totalSupply",
    },
  ],
});

// results[0].result → balance user1
// results[1].result → balance user2
// results[2].result → totalSupply

RPC Methods yang Berguna

Tips Performance

Yang akan kamu pelajari