Passer au contenu principal

Envoyer des jetons avec ethers.js

ETHERS.JSERC-20JETONS
Débutant
Kim YongJun
6 avril 2021
3 minutes de lecture minute read

Envoyer un jeton avec ethers.js (5.0)

Dans ce tutoriel, vous allez apprendre à

  • Importer ethers.js
  • Transférer un jeton
  • Définir le prix du gaz en fonction de l'état du trafic réseau

Pour commencer

Pour commencer, nous devons d'abord importer la bibliothèque ethers.js dans notre JavaScript en intégrant ethers.js (5.0)

Installation

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

ES6 dans le navigateur :

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) dans le navigateur :

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

Paramètres

  1. contract_address : l'adresse du contrat du jeton (l'adresse du contrat est nécessaire lorsque le jeton que vous voulez transférer n'est pas de l'ether)
  2. send_token_amount : le montant que vous désirez envoyer au destinataire
  3. to_address : l'adresse du destinataire
  4. send_account : l'adresse de l'expéditeur
  5. private_key : clé privée de l'expéditeur afin de signer la transaction et de transférer véritablement les jetons

Remarque

signTransaction(tx) est retiré car sendTransaction() le fait en interne.

Procédure d'envoi

1. Se connecter au réseau (testnet)

Définir le fournisseur (Infura)

Se connecter au réseau de test Ropsten

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

2. Créer un portefeuille

1let wallet = new ethers.Wallet(private_key)

3. Connecter le portefeuille au réseau

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

4. Obtenir le prix actuel du gaz

1window.ethersProvider.getGasPrice() // gasPrice

5. Définir la transaction

Les variables définies ci-dessous sont dépendantes de send_token()

Paramètres de la transaction

  1. send_account : adresse de l'expéditeur du jeton
  2. to_address : adresse du destinataire du jeton
  3. send_token_amount : nombre de jetons à envoyer
  4. gas_limit : limite de gaz
  5. gas_price : prix du gaz

Voir ci-dessous pour savoir comment les utiliser

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. Transférer

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

Comment l’utiliser

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)
Afficher tout

Réussi !

image de la transaction effectuée avec succès

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}
Afficher tout

Dernière modification: , 4 décembre 2023

Ce tutoriel vous a été utile ?