Надсилання токенів за допомогою ethers.js
ETHERS.JS
ERC-20
токени
Для початківців
Кім Йон Джун
6 квітня 2021 р.
3 хвилин на читання
Надсилання токенів за допомогою ethers.js(5.0)
У цьому посібнику ви дізнаєтеся, як
- Імпортувати ethers.js
- Переказувати токени
- Встановлювати ціну газу відповідно до завантаженості мережі
З чого почати
Щоб почати, ми повинні спочатку імпортувати бібліотеку ethers.js у наш JavaScript Підключення ethers.js(5.0)
Встановлення
/home/ricmoo> npm install --save ethers
ES6 у браузері
<script type="module">
import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
// Ваш код тут...
</script>
ES3(UMD) у браузері
<script
src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"
type="application/javascript"
></script>
Параметри
contract_address: Адреса контракту токена (адреса контракту потрібна, коли токен, який ви хочете переказати, не є етером)send_token_amount: Сума, яку ви хочете надіслати одержувачуto_address: Адреса одержувачаsend_account: Адреса відправникаprivate_key: Приватний ключ відправника для підписання транзакції та фактичного переказу токенів
Примітка
signTransaction(tx) видалено, оскільки sendTransaction() робить це внутрішньо.
Процедура надсилання
1. Підключення до мережі (тестова мережа)
Налаштування провайдера (Infura)
Підключення до тестової мережі Ропстен
window.ethersProvider = new ethers.providers.InfuraProvider("ropsten")
2. Створення гаманця
let wallet = new ethers.Wallet(private_key)
3. Підключення гаманця до мережі
let walletSigner = wallet.connect(window.ethersProvider)
4. Отримання поточної ціни газу
window.ethersProvider.getGasPrice() // ціна газу
5. Визначення транзакції
Ці змінні, визначені нижче, залежать від send_token()
Параметри транзакції
send_account: адреса відправника токенаto_address: адреса одержувача токенаsend_token_amount: кількість токенів для надсиланняgas_limit: ліміт газуgas_price: ціна газу
Дивіться нижче, як це використовувати
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. Переказ
walletSigner.sendTransaction(tx).then((transaction) => {
console.dir(transaction)
alert("Send finished!")
})
Як це використовувати
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
)
Успіх!
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) {
// загальна відправка токенів
let contract = new ethers.Contract(
contract_address,
send_abi,
walletSigner
)
// Скільки токенів?
let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
console.log(`numberOfTokens: ${numberOfTokens}`)
// Відправити токени
contract.transfer(to_address, numberOfTokens).then((transferResult) => {
console.dir(transferResult)
alert("sent token")
})
} // відправка етеру
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!!")
}
}
})
}
