Kuita mkataba-erevu kutoka kwa JavaScript
Katika mafunzo haya tutaona jinsi ya kuita utendakazi wa mkataba-erevu kutoka kwa JavaScript. Kwanza ni kusoma hali ya mkataba-erevu (k.m., salio la mwenye ERC20), kisha tutarekebisha hali ya mnyororo wa bloku kwa kufanya uhamisho wa tokeni. Unapaswa kuwa tayari unafahamu kuhusu kuweka mazingira ya JS ili kuingiliana na mnyororo wa bloku.
Kwa mfano huu tutacheza na tokeni ya DAI, kwa madhumuni ya majaribio tutagawa mnyororo wa bloku kwa kutumia ganache-cli na kufungua anwani ambayo tayari ina DAI nyingi:
ganache-cli -f https://mainnet.infura.io/v3/[UFUNGUO WAKO WA INFURA] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81Ili kuingiliana na mkataba-erevu tutahitaji anwani yake na ABI:
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]45
46const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"Kwa mradi huu, tuliondoa ABI kamili ya ERC20 ili kuweka tu utendakazi wa balanceOf na transfer lakini unaweza kupata ABI kamili ya ERC20 hapa (opens in a new tab).
Kisha tunahitaji kuanzisha mkataba wetu-erevu:
1const web3 = new Web3("http://localhost:8545")2
3const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)Pia tutaweka anwani mbili:
- anayepokea uhamisho na
- ambayo tayari tumeifungua ambayo itatuma:
1const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"2const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"Katika sehemu inayofuata tutaita utendakazi wa balanceOf ili kupata kiasi cha sasa cha tokeni ambazo anwani zote mbili zinashikilia.
Wito: Kusoma thamani kutoka kwa mkataba-erevu
Mfano wa kwanza utaita mbinu ya "kudumu" na kutekeleza mbinu yake ya mkataba-erevu katika EVM bila kutuma muamala wowote. Kwa hili tutasoma salio la ERC20 la anwani. Soma makala yetu kuhusu tokeni za ERC20.
Unaweza kufikia mbinu za mkataba-erevu ulioanzishwa ambao umetoa ABI yake kama ifuatavyo: yourContract.methods.methodname. Kwa kutumia utendakazi wa call utapokea matokeo ya kutekeleza utendakazi.
1daiToken.methods.balanceOf(senderAddress).call(function (err, res) {2 if (err) {3 console.log("Kosa limetokea", err)4 return5 }6 console.log("Salio ni: ", res)7})Kumbuka kuwa DAI ERC20 ina desimali 18, kumaanisha unahitaji kuondoa sufuri 18 ili kupata kiasi sahihi. uint256 hurejeshwa kama mifuatano kwa kuwa JavaScript haishughulikii thamani kubwa za nambari. Ikiwa huna uhakika jinsi ya kushughulikia nambari kubwa katika JS angalia mafunzo yetu kuhusu bignumber.js (opens in a new tab).
Tuma: Kutuma muamala kwa utendakazi wa mkataba-erevu
Kwa mfano wa pili tutaita utendakazi wa uhamisho wa mkataba-erevu wa DAI ili kutuma DAI 10 kwa anwani yetu ya pili. Utendakazi wa uhamisho unakubali vigezo viwili: anwani ya mpokeaji na kiasi cha tokeni za kuhamisha:
1daiToken.methods2 .transfer(receiverAddress, "100000000000000000000")3 .send({ from: senderAddress }, function (err, res) {4 if (err) {5 console.log("Kosa limetokea", err)6 return7 }8 console.log("Hashi ya muamala: " + res)9 })Utendakazi wa call hurejesha hashi ya muamala ambayo itachimbwa kwenye mnyororo wa bloku. Kwenye Ethereum, hashi za miamala zinatabirika - hivyo ndivyo tunavyoweza kupata hashi ya muamala kabla haujatekelezwa (jifunze jinsi hashi zinavyokokotolewa hapa (opens in a new tab)).
Kwa kuwa utendakazi huwasilisha tu muamala kwenye mnyororo wa bloku, hatuwezi kuona matokeo hadi tujue ni lini utachimbwa na kujumuishwa kwenye mnyororo wa bloku. Katika mafunzo yanayofuata tutajifunza jinsi ya kusubiri muamala utekelezwe kwenye mnyororo wa bloku kwa kujua hashi yake (opens in a new tab).
Ukurasa ulihaririwa mwisho: 3 Machi 2026