Ir al contenido principal

Enviar tokens usando ethers.js

ETHERS.JSERC-20TOKENS
Principiante
Kim YongJun
6 de abril de 2021
3 minuto leído minute read

Enviar token usando ethers.js(5.0)

En este tutorial aprenderá:

  • Cómo importar ethers.js
  • Cómo transferir tokens
  • Cómo establecer el precio del gas según la situación de tráfico de la red

Para comenzar

Para comenzar, primero debemos importar la biblioteca de ethers.js en nuestro javascript Incluya ethers.js(5.0)

Instalación

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

ES6 en el navegador

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

ES3(UMD) en el navegador

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

Parámetros

  1. contract_address: la dirección del contrato del token (se necesita la dirección cuando el token que quiere transferir no es ether)
  2. send_token_amount: la cantidad que quiere enviar al receptor
  3. to_address: la dirección del receptor
  4. send_account: la dirección del que envía
  5. private_key: la clave privada del remitente para firmar la transacción y tranferir los tokens

Aviso

signTransaction(tx) se eliminó porque sendTransaction() lo hace internamente.

Procedimientos de envío

1. Conectarse a la red de prueba (testnet)

Establecer el proveedor (Infura)

Conectarse a la red de prueba Ropsten

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

2. Crear una billetera

1let wallet = new ethers.Wallet(private_key)

3. Conectar la billetera a la red

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

4. Obtener el precio actual de gas

1window.ethersProvider.getGasPrice() // gasPrice

5. Definir la transacción

Estas variables definidas a continuación dependen del send_token()

Parámetros de transacción

  1. send_account: dirección del emisor de tokens
  2. to_address: dirección del receptor de tokens
  3. send_token_amount: la cantidad de tokens a enviar
  4. gas_limit: límite de gas
  5. gas_price: precio del gas

Vea a continuación cómo usar

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. Transferir

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

Cómo utilizarlo

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)
Mostrar todo

¡Éxito!

imagen de transacción realizada con éxito

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 // general token send
17 let contract = new ethers.Contract(
18 contract_address,
19 send_abi,
20 walletSigner
21 )
22
23 // How many tokens?
24 let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
25 console.log(`numberOfTokens: ${numberOfTokens}`)
26
27 // Send tokens
28 contract.transfer(to_address, numberOfTokens).then((transferResult) => {
29 console.dir(transferResult)
30 alert("sent token")
31 })
32 } // ether send
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("Send finished!")
50 })
51 } catch (error) {
52 alert("failed to send!!")
53 }
54 }
55 })
56}
Mostrar todo

Última edición: @pettinarip(opens in a new tab), 4 de diciembre de 2023

¿Le ha resultado útil este tutorial?