ethers.js Kullanarak Token Gönderme
ETHERS.JS
ERC-20
TOKENLAR
Başlangıç
Kim YongJun
6 Nisan 2021
2 dakikalık okuma
ethers.js(5.0) Kullanarak Token Gönderme
Bu Eğitimde Neler Öğreneceksiniz
- ethers.js'yi içe aktarma
- Token transfer etme
- Ağ trafiği durumuna göre gas fiyatı belirleme
Başlarken
Başlamak için öncelikle ethers.js kütüphanesini JavaScript'imize içe aktarmalıyız ethers.js(5.0)'i dahil edin
Kurulum
/home/ricmoo> npm install --save ethers
Tarayıcıda ES6
<script type="module">
import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
// Kodunuz buraya...
</script>
Tarayıcıda ES3(UMD)
<script
src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"
type="application/javascript"
></script>
Parametreler
contract_address: Token sözleşme adresi (transfer etmek istediğiniz token Ether değilse sözleşme adresi gereklidir)send_token_amount: Alıcıya göndermek istediğiniz miktarto_address: Alıcının adresisend_account: Gönderenin adresiprivate_key: İşlemi imzalamak ve token'ları fiilen transfer etmek için gönderenin özel anahtarı
Not
sendTransaction() bunu dahili olarak yaptığı için signTransaction(tx) kaldırılmıştır.
Gönderme Prosedürleri
1. Ağa bağlanma (test ağı)
Sağlayıcıyı Ayarlama (Infura)
Ropsten test ağına bağlanma
window.ethersProvider = new ethers.providers.InfuraProvider("ropsten")
2. Cüzdan oluşturma
let wallet = new ethers.Wallet(private_key)
3. Cüzdanı ağa bağlama
let walletSigner = wallet.connect(window.ethersProvider)
4. Mevcut gas fiyatını alma
window.ethersProvider.getGasPrice() // gasPrice
5. İşlemi Tanımlama
Aşağıda tanımlanan bu değişkenler send_token()'e bağlıdır
İşlem parametreleri
send_account: token göndereninin adresito_address: token alıcısının adresisend_token_amount: gönderilecek token miktarıgas_limit: gaz limitigas_price: gas fiyatı
Nasıl kullanılacağını görmek için aşağıya bakın
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. Transfer
walletSigner.sendTransaction(tx).then((transaction) => {
console.dir(transaction)
alert("Send finished!")
})
Nasıl kullanılır
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
)
Başarılı!
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) {
// genel Token gönderimi
let contract = new ethers.Contract(
contract_address,
send_abi,
walletSigner
)
// Kaç Token?
let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18)
console.log(`numberOfTokens: ${numberOfTokens}`)
// Token gönder
contract.transfer(to_address, numberOfTokens).then((transferResult) => {
console.dir(transferResult)
alert("sent token")
})
} // Ether gönderimi
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!!")
}
}
})
}
