Ruka kwenda kwenye maudhui makuu

Kutuma Tokeni Kwa Kutumia ethers.js

ETHERS.JS
ERC-20
TOKENS
Beginner
Kim YongJun
6 Aprili 2021
3 minute read

Tuma Tokeni Kwa Kutumia ethers.js(5.0)

Katika Somo Hili Utajifunza Jinsi ya

  • Ingiza ethers.js
  • Hamisha tokeni
  • Weka bei ya gesi kulingana na hali ya msongamano wa mtandao

Ili Kuanza

Ili kuanza, ni lazima kwanza tuingize maktaba ya ethers.js kwenye javascript yetu Jumuisha ethers.js(5.0)

Kusakinisha

1/home/ricmoo> npm install --save ethers

ES6 katika Kivinjari

1<script type="module">
2 import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
3 // Msimbo wako hapa...
4</script>

ES3(UMD) katika Kivinjari

1<script
2 src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"
3 type="application/javascript"
4></script>

Vigezo

  1. contract_address: Anwani ya mkataba wa Tokeni (anwani ya mkataba inahitajika wakati tokeni unayotaka kuhamisha si ether)
  2. send_token_amount: Kiasi unachotaka kutuma kwa mpokeaji
  3. to_address: Anwani ya mpokeaji
  4. send_account: Anwani ya mtumaji
  5. private_key: Ufunguo binafsi wa mtumaji ili kusaini muamala na kuhamisha tokeni

Tangazo

signTransaction(tx) imeondolewa kwa sababu sendTransaction() inaifanya ndani kwa ndani.

Taratibu za Kutuma

1. Unganisha na mtandao (testnet)

Weka Mtoa Huduma (Infura)

Unganisha na Ropsten testnet

1window.ethersProvider = new ethers.providers.InfuraProvider("ropsten")

2. Tengeneza mkoba

1let wallet = new ethers.Wallet(private_key)

3. Unganisha Mkoba na mtandao

1let walletSigner = wallet.connect(window.ethersProvider)

4. Pata bei ya sasa ya gesi

1window.ethersProvider.getGasPrice() // bei ya gesi

5. Bainisha Muamala

Vigezo hivi vilivyobainishwa hapa chini vinategemea send_token()

Vigezo vya muamala

  1. send_account: anwani ya mtumaji wa tokeni
  2. to_address: anwani ya mpokeaji wa tokeni
  3. send_token_amount: kiasi cha tokeni za kutuma
  4. gas_limit: kikomo cha gesi
  5. gas_price: bei ya gesi

Tazama hapa chini jinsi ya kutumia

1const tx = {
2 from: send_account,
3 to: to_address,
4 value: ethers.utils.parseEther(send_token_amount),
5 nonce: window.ethersProvider.getTransactionCount(send_account, "latest"),
6 gasLimit: ethers.utils.hexlify(gas_limit), // 100000
7 gasPrice: gas_price,
8}

6. Hamisha

1walletSigner.sendTransaction(tx).then((transaction) => {
2 console.dir(transaction)
3 alert("Kutuma kumekamilika!")
4})

Jinsi ya kuitumia

1let private_key =
2 "41559d28e936dc92104ff30691519693fc753ffbee6251a611b9aa1878f12a4d"
3let send_token_amount = "1"
4let to_address = "0x4c10D2734Fb76D3236E522509181CC3Ba8DE0e80"
5let send_address = "0xda27a282B5B6c5229699891CfA6b900A716539E6"
6let gas_limit = "0x100000"
7let wallet = new ethers.Wallet(private_key)
8let walletSigner = wallet.connect(window.ethersProvider)
9let contract_address = ""
10window.ethersProvider = new ethers.providers.InfuraProvider("ropsten")
11
12send_token(
13 contract_address,
14 send_token_amount,
15 to_address,
16 send_address,
17 private_key
18)
Onyesha yote

Imefanikiwa!

picha ya muamala uliofanywa kwa mafanikio

send_token()

1function send_token(
2 contract_address,
3 send_token_amount,
4 to_address,
5 send_account,
6 private_key
7) {
8 let wallet = new ethers.Wallet(private_key)
9 let walletSigner = wallet.connect(window.ethersProvider)
10
11 window.ethersProvider.getGasPrice().then((currentGasPrice) => {
12 let gas_price = ethers.utils.hexlify(parseInt(currentGasPrice))
13 console.log(`gas_price: ${gas_price}`)
14
15 if (contract_address) {
16 // utumaji wa tokeni wa jumla
17 let contract = new ethers.Contract(
18 contract_address,
19 send_abi,
20 walletSigner
21 )
22
23 // Tokeni ngapi?
24 let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
25 console.log(`numberOfTokens: ${numberOfTokens}`)
26
27 // Tuma tokeni
28 contract.transfer(to_address, numberOfTokens).then((transferResult) => {
29 console.dir(transferResult)
30 alert("tokeni imetumwa")
31 })
32 } // utumaji wa ether
33 else {
34 const tx = {
35 from: send_account,
36 to: to_address,
37 value: ethers.utils.parseEther(send_token_amount),
38 nonce: window.ethersProvider.getTransactionCount(
39 send_account,
40 "latest"
41 ),
42 gasLimit: ethers.utils.hexlify(gas_limit), // 100000
43 gasPrice: gas_price,
44 }
45 console.dir(tx)
46 try {
47 walletSigner.sendTransaction(tx).then((transaction) => {
48 console.dir(transaction)
49 alert("Kutuma kumekamilika!")
50 })
51 } catch (error) {
52 alert("imeshindwa kutuma!!")
53 }
54 }
55 })
56}
Onyesha yote

Ukurasa ulihaririwa mwisho: 4 Desemba 2023

Umesaidika na mafunzo haya?