Enviar tokens usando ethers.js
ETHERS.JSERC-20TOKENS
PrincipianteKim 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<script2 src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"3 type="application/javascript"4></script>
Parámetros
contract_address
: la dirección del contrato del token (se necesita la dirección cuando el token que quiere transferir no es ether)send_token_amount
: la cantidad que quiere enviar al receptorto_address
: la dirección del receptorsend_account
: la dirección del que envíaprivate_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
send_account
: dirección del emisor de tokensto_address
: dirección del receptor de tokenssend_token_amount
: la cantidad de tokens a enviargas_limit
: límite de gasgas_price
: precio del gas
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), // 1000007 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")1112send_token(13 contract_address,14 send_token_amount,15 to_address,16 send_address,17 private_key18)Mostrar todo
¡Éxito!
send_token()
1function send_token(2 contract_address,3 send_token_amount,4 to_address,5 send_account,6 private_key7) {8 let wallet = new ethers.Wallet(private_key)9 let walletSigner = wallet.connect(window.ethersProvider)1011 window.ethersProvider.getGasPrice().then((currentGasPrice) => {12 let gas_price = ethers.utils.hexlify(parseInt(currentGasPrice))13 console.log(`gas_price: ${gas_price}`)1415 if (contract_address) {16 // general token send17 let contract = new ethers.Contract(18 contract_address,19 send_abi,20 walletSigner21 )2223 // How many tokens?24 let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)25 console.log(`numberOfTokens: ${numberOfTokens}`)2627 // Send tokens28 contract.transfer(to_address, numberOfTokens).then((transferResult) => {29 console.dir(transferResult)30 alert("sent token")31 })32 } // ether send33 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), // 10000043 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
p
Última edición: @pettinarip(opens in a new tab), 4 de diciembre de 2023