إرسال الرموز المميزة باستخدام ethers.js
ETHERS.JS
ERC-20
رموز مميزة
مبتدئ
كيم يونغ جون
6 أبريل 2021
3 دقيقة للقراءة
إرسال رمز مميز باستخدام ethers.js(5.0)
في هذا البرنامج التعليمي ستتعلم كيفية
- استيراد ethers.js
- تحويل رمز مميز
- تعيين سعر الغاز وفقًا لحالة حركة المرور في الشبكة
للبدء
للبدء، يجب علينا أولاً استيراد مكتبة ethers.js في كود JavaScript الخاص بنا تضمين ethers.js v5
التثبيت
/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!!")
}
}
})
}
