Envoyer des jetons avec ethers.js
ETHERS.JS
ERC-20
JETONS
Débutant
Kim YongJun
6 avril 2021
3 minutes de lecture
Envoyer un jeton avec ethers.js(5.0)
Dans ce tutoriel, vous apprendrez à
- Importer ethers.js
- Transférer un jeton
- Définir le prix du gaz en fonction de l'état du trafic sur le réseau
Pour commencer
Pour commencer, nous devons d'abord importer la bibliothèque ethers.js dans notre JavaScript. Inclure ethers.js(5.0)
Installation
/home/ricmoo> npm install --save ethers
ES6 dans le navigateur
<script type="module">
import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
// Votre code ici...
</script>
ES3(UMD) dans le navigateur
<script
src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"
type="application/javascript"
></script>
Paramètres
contract_address: Adresse du contrat du jeton (l'adresse du contrat est nécessaire lorsque le jeton que vous souhaitez transférer n'est pas de l'ether)send_token_amount: Le montant que vous souhaitez envoyer au destinataireto_address: L'adresse du destinatairesend_account: L'adresse de l'expéditeurprivate_key: Clé privée de l'expéditeur pour signer la transaction et transférer réellement les jetons
Remarque
signTransaction(tx) est supprimé car sendTransaction() le fait en interne.
Procédures d'envoi
1. Se connecter au réseau (réseau de test)
Définir le fournisseur (Infura)
Se connecter au réseau de test Ropsten
window.ethersProvider = new ethers.providers.InfuraProvider("ropsten")
2. Créer un portefeuille
let wallet = new ethers.Wallet(private_key)
3. Connecter le portefeuille au réseau
let walletSigner = wallet.connect(window.ethersProvider)
4. Obtenir le prix du gaz actuel
window.ethersProvider.getGasPrice() // gasPrice
5. Définir la transaction
Ces variables définies ci-dessous dépendent 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: la quantité de jetons à envoyergas_limit: limite de gazgas_price: prix du gaz
Voir ci-dessous pour savoir comment l'utiliser
const tx = {
from: send_account,
to: to_address,
value: ethers.utils.parseEther(send_token_amount),
nonce: window.ethersProvider.getTransactionCount(send_account, "latest"),
gasLimit: ethers.utils.hexlify(gas_limit), // 100000
gasPrice: gas_price,
}
6. Transfert
walletSigner.sendTransaction(tx).then((transaction) => {
console.dir(transaction)
alert("Send finished!")
})
Comment l'utiliser
let private_key =
"41559d28e936dc92104ff30691519693fc753ffbee6251a611b9aa1878f12a4d"
let send_token_amount = "1"
let to_address = "0x4c10D2734Fb76D3236E522509181CC3Ba8DE0e80"
let send_address = "0xda27a282B5B6c5229699891CfA6b900A716539E6"
let gas_limit = "0x100000"
let wallet = new ethers.Wallet(private_key)
let walletSigner = wallet.connect(window.ethersProvider)
let contract_address = ""
window.ethersProvider = new ethers.providers.InfuraProvider("ropsten")
send_token(
contract_address,
send_token_amount,
to_address,
send_address,
private_key
)
Succès !
send_token()
function send_token(
contract_address,
send_token_amount,
to_address,
send_account,
private_key
) {
let wallet = new ethers.Wallet(private_key)
let walletSigner = wallet.connect(window.ethersProvider)
window.ethersProvider.getGasPrice().then((currentGasPrice) => {
let gas_price = ethers.utils.hexlify(parseInt(currentGasPrice))
console.log(`gas_price: ${gas_price}`)
if (contract_address) {
// envoi général de jetons
let contract = new ethers.Contract(
contract_address,
send_abi,
walletSigner
)
// Combien de jetons ?
let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
console.log(`numberOfTokens: ${numberOfTokens}`)
// Envoyer des jetons
contract.transfer(to_address, numberOfTokens).then((transferResult) => {
console.dir(transferResult)
alert("sent token")
})
} // envoi d'ether
else {
const tx = {
from: send_account,
to: to_address,
value: ethers.utils.parseEther(send_token_amount),
nonce: window.ethersProvider.getTransactionCount(
send_account,
"latest"
),
gasLimit: ethers.utils.hexlify(gas_limit), // 100000
gasPrice: gas_price,
}
console.dir(tx)
try {
walletSigner.sendTransaction(tx).then((transaction) => {
console.dir(transaction)
alert("Send finished!")
})
} catch (error) {
alert("failed to send!!")
}
}
})
}
