Memanggil kontrak pintar dari JavaScript
Dalam panduan ini kita akan melihat bagaimana cara memanggil fungsi kontrak pintar dari JavaScript. Yang pertama adalah membaca state kontrak pintar (mis. saldo pemilik ERC20), kemudian kita akan mengubah state blockchain tersebut dengan membuat transfer token. Anda seharusnya sudah tidak asing lagi dengan menyiapkan lingkungan JS untuk berinteraksi dengan blockchain.
Untuk contoh ini kita akan menggunakan token DAI, untuk kepentingan pengujian kita akan melakukan fork blockchain menggunakan ganache-cli dan membuka alamat yang sudah memiliki banyak DAI:
ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81
Untuk berinteraksi dengan kontrak pintar kita membutuhkan alamat dan ABI-nya:
1const ERC20TransferABI = [2 {3 constant: false,4 inputs: [5 {6 name: "_to",7 type: "address",8 },9 {10 name: "_value",11 type: "uint256",12 },13 ],14 name: "transfer",15 outputs: [16 {17 name: "",18 type: "bool",19 },20 ],21 payable: false,22 stateMutability: "nonpayable",23 type: "function",24 },25 {26 constant: true,27 inputs: [28 {29 name: "_owner",30 type: "address",31 },32 ],33 name: "balanceOf",34 outputs: [35 {36 name: "balance",37 type: "uint256",38 },39 ],40 payable: false,41 stateMutability: "view",42 type: "function",43 },44]4546const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"Tampilkan semuaSalin
Untuk proyek ini kita membongkar ABI ERC20 yang sudah lengkap dan hanya menyisakan fungsi balanceOf
dan transfer
tapi Anda bisa menemukan ABI ERC20 yang lengkap di sini(opens in a new tab).
Kita kemudian perlu membuat instance kontrak pintarnya:
1const web3 = new Web3("http://localhost:8545")23const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)Salin
Kita juga akan menyiapkan dua alamat:
- satu yang akan menerima transfer dan
- satu yang kita buka sebelumnya sebagai pengirim:
1const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"2const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"Salin
Selanjutnya kita akan memanggil fungsi balanceOf
untuk mengambil jumlah token saat ini yang dimiliki kedua alamat tersebut.
Call: Membaca nilai dari kontrak pintar
Contoh pertama akan memanggil metode "konstan" dan mengeksekusi metode kontrak pintarnya dalam EVM tanpa mengirim transaksi apa pun. Untuk ini, kita akan membaca saldo ERC20 dari sebuah alamat. Baca artikel kami tentang token ERC20.
Anda dapat mengakses metode kontrak pintar beserta instancenya yang untuknya Anda menyediakan ABI sebagai berikut: yourContract.methods.methodname
. Dengan menggunakan fungsi call
Anda akan menerima hasil dari eksekusi fungsi.
1daiToken.methods.balanceOf(senderAddress).call(function (err, res) {2 if (err) {3 console.log("An error occured", err)4 return5 }6 console.log("The balance is: ", res)7})Salin
Ingat bahwa ERC20 DAI memliki 18 desimal yang berarti Anda harus menghapus 18 nol untuk mendapatkan hasil yang benar. uint256 are returned as strings as JavaScript does not handle big numeric values. Apabila Anda tidak yakin cara menangani angka besar dalam JS, lihat tutorial tentang bignumber.js(opens in a new tab).
Kirim: Mengirim transaksi kepada fungsi kontrak pintar
Untuk contoh kedua kita akan memanggil fungsi transfer dari kontrak pintar DAI untuk mengirim 10 DAI ke alamat kedua kita. Fungsi transfer menerima dua parameter: alamat penerima dan jumlah token yang ditransfer:
1daiToken.methods2 .transfer(receiverAddress, "100000000000000000000")3 .send({ from: senderAddress }, function (err, res) {4 if (err) {5 console.log("An error occured", err)6 return7 }8 console.log("Hash of the transaction: " + res)9 })Tampilkan semuaSalin
Fungsi call mengembalikan hash transaksi yang akan ditambang ke dalam blockchain. Di Ethereum, hash transaksi dapat diperkirakan - itulah cara kita bisa mendapatkan hash transaksi sebelum eksekusinya (pelajari cara menghitung hash di sini(opens in a new tab)).
Karena fungsi hanya mengirimkan transaksi ke dalam blockchain, kita tidak dapat melihat hasilnya sampai kita tahu kapan transaksi ditambang dan dimasukkan ke dalam blockchain. Dalam tutorial selanjutnya kita akan mempelajari bagaimana cara menunggu transaksi agar dieksekusi dalam blockchain dengan mengetahui hashnya(opens in a new tab).
Terakhir diedit: @pettinarip(opens in a new tab), 23 November 2023