0Pricing
Web3 & DApp Development Fundamentals · Pelajaran

Membaca Data Kontrak

Memanggil fungsi view

Membaca Data Kontrak adalah pelajaran Web3 & DApp Development Fundamentals gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Web3 & DApp Development Fundamentals, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Web3 & DApp Development Fundamentals mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Calling View Functions

Reading data from a contract is free — it does not change state, cost gas, or require a signature. These are view and pure functions.

With ethers.js you attach to a deployed contract and call them like normal JavaScript methods.

You Need the ABI

To talk to a contract, ethers needs its ABI — the interface describing each function. You can use the full compiled ABI or a minimal human-readable one:

const abi = [ "function name() view returns (string)", "function balanceOf(address) view returns (uint256)", ];
const abi = [
  "function name() view returns (string)",
  "function balanceOf(address) view returns (uint256)",
];

Creating a Contract Instance

Combine the address, ABI, and a provider to create a read-only contract object:

const contract = new ethers.Contract( tokenAddress, abi, provider );

Because it was given a provider (not a signer), it can only read.

const contract = new ethers.Contract(
  tokenAddress,
  abi,
  provider
);

Calling a Read Method

Call any view function and await the result:

const name = await contract.name(); const supply = await contract.totalSupply(); console.log(name, supply);

Each call returns a Promise that resolves to the decoded value.

const name = await contract.name();
const supply = await contract.totalSupply();
console.log(name, supply);

Passing Arguments

View functions can take parameters. Pass them like normal function arguments:

const balance = await contract.balanceOf( "0xUserAddress" ); console.log(ethers.formatUnits(balance, 18));

ethers encodes the arguments according to the ABI types automatically.

const balance = await contract.balanceOf(
  "0xUserAddress"
);
console.log(ethers.formatUnits(balance, 18));

Handling Returned Numbers

Numeric returns are BigInt in ethers v6. To display token amounts, convert with the right decimals:

const raw = await contract.balanceOf(user); const human = ethers.formatUnits(raw, 18);

Use formatUnits/parseUnits for tokens, formatEther/parseEther for ETH (18 decimals).

const raw = await contract.balanceOf(user);
const human = ethers.formatUnits(raw, 18);

Returns with Multiple Values

If a function returns several values, ethers gives you a result array you can destructure:

const [reserve0, reserve1, timestamp] = await pair.getReserves(); console.log(reserve0, reserve1);

Named return values are also accessible by name on the result object.

const [reserve0, reserve1, timestamp] =
  await pair.getReserves();
console.log(reserve0, reserve1);

Reading at a Past Block

You can query historical state by passing a block tag as an override:

const oldBalance = await contract.balanceOf( user, { blockTag: 19000000 } );

This requires an archive node, but lets you reconstruct past state.

const oldBalance = await contract.balanceOf(
  user,
  { blockTag: 19000000 }
);

Static Calls on Write Functions

Sometimes you want to simulate a state-changing function without sending it, to read its would-be result or check it does not revert:

const result = await contract.transfer .staticCall(to, amount); console.log("Would return:", result);

This runs the call locally without broadcasting a transaction.

const result = await contract.transfer
  .staticCall(to, amount);
console.log("Would return:", result);

Reads Are Free

Because view calls execute on the node without changing state:

  • They cost no gas for the caller.
  • They need no signer or wallet approval.
  • They return almost instantly.

Only state changes require a transaction and gas.

Using a Hardhat-Attached Instance

In Hardhat scripts you can attach to a deployed address without writing the ABI by hand, since artifacts are already compiled:

const token = await ethers.getContractAt( "MyToken", deployedAddress ); console.log(await token.totalSupply());

ethers loads the ABI from the artifact for you.

const token = await ethers.getContractAt(
  "MyToken",
  deployedAddress
);
console.log(await token.totalSupply());

Quick Check

Test your understanding of reading contract data.

Recap

You learned to read on-chain data.

  • Create a contract with address + ABI + provider for read-only access.
  • Call view functions like normal methods and await the result.
  • Numeric returns are BigInt; convert with formatUnits/formatEther.
  • Destructure multiple return values; query the past with blockTag.
  • Use staticCall to simulate write functions; reads are free.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membaca Data Kontrak” gratis?

Ya — teks lengkap “Membaca Data Kontrak” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Web3 & DApp Development Fundamentals, upgrade ke CoddyKit PRO. Kursus Web3 & DApp Development Fundamentals mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membaca Data Kontrak”?

Memanggil fungsi view Kamu berlatih Web3 & DApp Development Fundamentals dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Web3 & DApp Development Fundamentals?

Tidak diperlukan pengalaman sebelumnya. Web3 & DApp Development Fundamentals di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Membaca Data Kontrak” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Web3 & DApp Development Fundamentals ini?

Ya. Setiap pelajaran Web3 & DApp Development Fundamentals menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menghubungkan ke Provider
  2. Membaca Data Kontrak
  3. Mengirim Transaksi
  4. Mendengarkan Event
← Kembali ke Web3 & DApp Development Fundamentals