Envoyer des jetons avec ethers.js
ETHERS.JSERC-20JETONS
DébutantKim 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<script2 src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"3 type="application/javascript"4></script>
Paramètres
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)send_token_amount
: le montant que vous désirez envoyer au destinataireto_address
: l'adresse du destinatairesend_account
: l'adresse de l'expéditeurprivate_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
send_account
: adresse de l'expéditeur du jetonto_address
: adresse du destinataire du jetonsend_token_amount
: nombre de jetons à envoyergas_limit
: limite de gazgas_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), // 1000007 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")1112send_token(13 contract_address,14 send_token_amount,15 to_address,16 send_address,17 private_key18)Afficher tout
Réussi !
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}Afficher tout
p
Dernière modification: @pettinarip(opens in a new tab), 4 décembre 2023