Study
Hardhat

Interaksi Kontrak lewat ethers.js dari Script

Penjelasan

Setelah contract di-deploy, interaksi selanjutnya (baik dari script otomatisasi maupun aplikasi front-end) dilakukan lewat ethers.js dengan menggabungkan alamat contract dan ABI hasil kompilasi. Fungsi `ethers.getContractAt(namaContract, alamat)` mengembalikan instance contract yang siap dipanggil fungsinya, baik fungsi read-only (otomatis tidak mengirim transaksi) maupun fungsi yang mengubah state (otomatis mengirim transaksi dan butuh signer). Untuk fungsi yang mengubah state, hasil pemanggilan berupa objek transaksi yang perlu di-`wait()` agar script menunggu transaksi ter-mining sebelum melanjutkan, memastikan urutan operasi berikutnya berjalan di atas state yang sudah ter-update.

Contoh Konsep

const { ethers } = require("hardhat");

async function main() {
  const address = "0xCONTRACT_ADDRESS";
  const counter = await ethers.getContractAt("Counter", address);

  // Fungsi read-only, tidak mengirim transaksi
  const current = await counter.number();
  console.log("Nilai saat ini:", current);

  // Fungsi yang mengubah state, mengirim transaksi
  const tx = await counter.increment();
  await tx.wait();

  console.log("Nilai setelah increment:", await counter.number());
}

main();

Praktikum

Tulis script yang terhubung ke contract SimpleBank yang sudah dideploy, memanggil deposit() dengan mengirim 1 ETH, lalu membaca kembali getBalance() untuk memastikan saldo bertambah.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Selalu `await tx.wait()` setelah memanggil fungsi write sebelum membaca state terbaru — tanpa itu, pembacaan berikutnya bisa terjadi sebelum transaksi ter-mining, menghasilkan data lama.