跳至主要内容

協助翻譯本頁面

🌏

由於尚未翻譯,本頁面內容以英文顯示。協助我們翻譯內容。

翻譯本頁面

這裡沒有漏洞!🐛

此頁面未翻譯,目前特意維持英文原文。

Sending Tokens Using ethers.js

ETHERS.JS
ERC-20
TOKENS
Beginner
✍Kim YongJun
📆2021年4月6日
⏱️3 minute read

Send Token Using ethers.js(5.0)

In This Tutorial You'll Learn How To

  • Import ethers.js
  • Transfer token
  • Set gas price according to the network traffic situation

To-Get-Started

To get started, we must first import the ethers.js library into our javascript Include ethers.js(5.0)

Installing

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

ES6 in the Browser

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>
5

ES3(UMD) in the Browser

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

Parameters

  1. contract_address: Token contract address (contract address is needed when the token you want to transfer is not ether)
  2. send_token_amount: The amount you want to send to the receiver
  3. to_address: The receiver's address
  4. send_account: The sender's address
  5. private_key: Private key of the sender to sign the transaction and actually transfer the tokens

Notice

signTransaction(tx) is removed because sendTransaction() does it internally.

Sending Procedures

1. Connect to network (testnet)

Set Provider (Infura)

Connect to Ropsten testnet

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

2. Create wallet

1let wallet = new ethers.Wallet(private_key)
2

3. Connect Wallet to net

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

4. Get current gas price

1window.ethersProvider.getGasPrice() // gasPrice
2

5. Define Transaction

These variables defined below are dependent on send_token()

Transaction parameters

  1. send_account: address of the token sender
  2. to_address: address of the token receiver
  3. send_token_amount: the amount of tokens to send
  4. gas_limit: gas limit
  5. gas_price: gas price

See below for how to use

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}
9

6. Transfer

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

How to use it

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)
19
顯示全部

Success!

image of transaction done successfully

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}
57
顯示全部
最後編輯: , Invalid DateTime
編輯頁面

這個頁面對您有幫助嗎?

網站上次更新: 2022年9月26日

使用以太坊

  • 尋找錢包
  • 取得以太幣
  • 去中心化應用程式 (dapp)
  • 第二層
  • 執行節點
  • 穩定幣
  • Stake ETH

生態系統

  • 社群中心
  • 以太坊基金會
  • 以太坊基金會部落格
  • 生態系統支援計畫
  • 以太坊漏洞懸賞計畫
  • 生態系統獎助金計畫
  • 以太坊品牌資產
  • Devcon