Перейти до основного контенту

Надсилання токенів за допомогою ethers.js

ETHERS.JS
ERC-20
ТОКЕНИ
Початківець
Kim YongJun
6 квітня 2021 р.
3 читається за хвилину

Надсилання токену за допомогою ethers.js(5.0)

У цьому посібнику ви дізнаєтеся, як

  • Імпортувати ethers.js
  • Переказати токен
  • Установити ціну на газ відповідно до ситуації з трафіком у мережі

Для початку

Для початку ми маємо спочатку імпортувати бібліотеку ethers.js у наш javascript Підключіть ethers.js(5.0)

Установлення

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

ES6 у браузері

1<script type="module">
2 import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
3 // Ваш код тут...
4</script>

ES3(UMD) у браузері

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

Параметри

  1. contract_address: адреса контракту токена (адреса контракту потрібна, якщо токен, який ви хочете переказати, — не ether)
  2. send_token_amount: сума, яку ви хочете надіслати одержувачу
  3. to_address: адреса одержувача
  4. send_account: адреса відправника
  5. private_key: приватний ключ відправника для підпису транзакції та фактичного переказу токенів

Примітка

signTransaction(tx) видалено, оскільки sendTransaction() робить це внутрішньо.

Процедури надсилання

1. Підключення до мережі (тестової мережі)

Налаштувати постачальника (Infura)

Підключитися до тестової мережі Ropsten

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

2. Створити гаманець

1let wallet = new ethers.Wallet(private_key)

3. Підключити гаманець до мережі

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

4. Отримати поточну ціну на газ

1window.ethersProvider.getGasPrice() // ціна на газ

5. Визначити транзакцію

Змінні, визначені нижче, залежать від send_token()

Параметри транзакції

  1. send_account: адреса відправника токена
  2. to_address: адреса одержувача токена
  3. send_token_amount: сума токенів для надсилання
  4. gas_limit: ліміт газу
  5. gas_price: ціна на газ

Див. нижче, як використовувати

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. Переказ

1walletSigner.sendTransaction(tx).then((transaction) => {
2 console.dir(transaction)
3 alert("Надсилання завершено!")
4})

Як це використовувати

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)
Показати все

Успіх!

зображення успішно виконаної транзакції

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}`)
14
15 if (contract_address) {
16 // загальне надсилання токена
17 let contract = new ethers.Contract(
18 contract_address,
19 send_abi,
20 walletSigner
21 )
22
23 // Скільки токенів?
24 let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
25 console.log(`кількість токенів: ${numberOfTokens}`)
26
27 // Надіслати токени
28 contract.transfer(to_address, numberOfTokens).then((transferResult) => {
29 console.dir(transferResult)
30 alert("токен надіслано")
31 })
32 } // надсилання 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("Надсилання завершено!")
50 })
51 } catch (error) {
52 alert("не вдалося надіслати!!")
53 }
54 }
55 })
56}
Показати все

Останні оновлення сторінки: 4 грудня 2023 р.

Чи була ця інструкція корисною?