Membaca Data Kontrak
Panggil fungsi view
Membaca Data Kontrak ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Memanggil Fungsi Bacaan
Membaca data daripada Contract adalah percuma — tindakan ini tidak mengubah keadaan, menggunakan gas atau memerlukan tandatangan. Ini ialah fungsi bacaan dan tulen.
Dengan ethers.js, anda menyambung kepada Contract yang telah digunakan dan memanggilnya seperti kaedah JavaScript biasa.
Anda Memerlukan ABI
Untuk berkomunikasi dengan Contract, ethers memerlukan ABI — antara muka yang menerangkan setiap fungsi. Anda boleh menggunakan ABI yang disusun sepenuhnya atau ABI minimum yang boleh dibaca manusia:
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)",
];Mencipta Contoh Contract
Gabungkan alamat, ABI dan provider untuk mencipta objek Contract read-only:
const contract = new ethers.Contract(
tokenAddress,
abi,
provider
);Oleh sebab ia diberikan provider, bukannya penandatangan, ia hanya boleh membaca.
const contract = new ethers.Contract(
tokenAddress,
abi,
provider
);Memanggil Kaedah Bacaan
Panggil mana-mana fungsi bacaan dan tunggu hasilnya:
const name = await contract.name();
const supply = await contract.totalSupply();
console.log(name, supply);Setiap panggilan mengembalikan Promise yang menghasilkan nilai yang telah dinyahkod.
const name = await contract.name();
const supply = await contract.totalSupply();
console.log(name, supply);Melewatkan Argumen
Fungsi bacaan boleh menerima parameter. Lewatkan parameter tersebut seperti argumen fungsi biasa:
const balance = await contract.balanceOf(
"0xUserAddress"
);
console.log(ethers.formatUnits(balance, 18));ethers mengekod argumen secara automatik berdasarkan jenis ABI.
const balance = await contract.balanceOf(
"0xUserAddress"
);
console.log(ethers.formatUnits(balance, 18));Mengendalikan Nombor yang Dikembalikan
Nilai berangka yang dikembalikan ialah BigInt dalam ethers v6. Untuk memaparkan jumlah token, tukarkannya menggunakan bilangan perpuluhan yang betul:
const raw = await contract.balanceOf(user);
const human = ethers.formatUnits(raw, 18);Gunakan formatUnits/parseUnits untuk token, dan formatEther/parseEther untuk ETH (18 tempat perpuluhan).
const raw = await contract.balanceOf(user);
const human = ethers.formatUnits(raw, 18);Nilai Pulangan Berbilang
Jika fungsi mengembalikan beberapa nilai, ethers memberikan anda tatasusunan hasil yang boleh dinyahstrukturkan:
const [reserve0, reserve1, timestamp] =
await pair.getReserves();
console.log(reserve0, reserve1);Nilai pulangan bernama juga boleh dicapai berdasarkan namanya pada objek hasil.
const [reserve0, reserve1, timestamp] =
await pair.getReserves();
console.log(reserve0, reserve1);Membaca pada Blok Terdahulu
Anda boleh membuat pertanyaan tentang keadaan sejarah dengan melepaskan tag blok sebagai penggantian:
const oldBalance = await contract.balanceOf(
user,
{ blockTag: 19000000 }
);Ini memerlukan nod arkib, tetapi membolehkan anda membina semula keadaan terdahulu.
const oldBalance = await contract.balanceOf(
user,
{ blockTag: 19000000 }
);Panggilan Statik pada Fungsi Tulis
Kadang-kadang anda mahu mensimulasikan fungsi yang mengubah keadaan tanpa menghantarnya, untuk membaca hasil yang mungkin diperoleh atau menyemak bahawa fungsi itu tidak akan dibatalkan:
const result = await contract.transfer
.staticCall(to, amount);
console.log("Would return:", result);Ini menjalankan panggilan secara setempat tanpa menyiarkan transaksi.
const result = await contract.transfer
.staticCall(to, amount);
console.log("Would return:", result);Bacaan Adalah Percuma
Oleh sebab panggilan bacaan dilaksanakan pada nod tanpa mengubah keadaan:
- Panggilan ini tidak menggunakan gas untuk pemanggil.
- Panggilan ini tidak memerlukan penandatangan atau kelulusan wallet.
- Panggilan ini mengembalikan hasil hampir serta-merta.
Hanya perubahan keadaan memerlukan transaksi dan gas.
Menggunakan Contoh yang Dilampirkan Hardhat
Dalam skrip Hardhat, anda boleh menyambung kepada alamat yang telah digunakan tanpa menulis ABI secara manual, kerana artifak telah pun disusun:
const token = await ethers.getContractAt(
"MyToken",
deployedAddress
);
console.log(await token.totalSupply());ethers memuatkan ABI daripada artifak untuk anda.
const token = await ethers.getContractAt(
"MyToken",
deployedAddress
);
console.log(await token.totalSupply());Semakan Pantas
Uji pemahaman anda tentang membaca data Contract.
Ulang Kaji
Anda telah mempelajari cara membaca data dalam rantaian.
- Cipta Contract dengan alamat + ABI + provider untuk akses read-only.
- Panggil fungsi bacaan seperti kaedah biasa dan gunakan
awaituntuk menunggu hasilnya. - Nilai berangka yang dikembalikan ialah BigInt; tukarkannya dengan
formatUnits/formatEther. - Nyahstrukturkan beberapa nilai pulangan; buat pertanyaan tentang masa lalu dengan
blockTag. - Gunakan
staticCalluntuk mensimulasikan fungsi tulis; bacaan adalah percuma.
Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 29
- Pelajaran
- 105
Soalan Lazim
Adakah pelajaran “Membaca Data Kontrak” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Membaca Data Kontrak”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Membaca Data Kontrak”?
Panggil fungsi view Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Membaca Data Kontrak” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?
Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menyambung kepada Provider
- Membaca Data Kontrak
- Menghantar Transaksi
- Mendengar Peristiwa