مكتبات API لـ JavaScript
لكي يتفاعل تطبيق ويب مع سلسلة الكتل لإيثيريوم (أي قراءة بيانات سلسلة الكتل و/أو إرسال معاملات إلى الشبكة)، يجب أن يتصل بعقدة إيثيريوم.
لهذا الغرض، ينفذ كل عميل إيثيريوم مواصفات JSON-RPC، لذلك هناك مجموعة موحدة من الطرق التي يمكن للتطبيقات الاعتماد عليها.
إذا كنت ترغب في استخدام JavaScript للاتصال بعقدة إيثيريوم، فمن الممكن استخدام JavaScript الأساسية ولكن توجد العديد من المكتبات المريحة داخل النظام البيئي التي تجعل هذا أسهل بكثير. باستخدام هذه المكتبات، يمكن للمطورين كتابة طرق بديهية من سطر واحد لتهيئة طلبات JSON-RPC (داخليًا) التي تتفاعل مع إيثيريوم.
يرجى ملاحظة أنه منذ الدمج، يلزم وجود قطعتين متصلتين من برامج إيثيريوم - عميل التنفيذ وعميل إجماع - لتشغيل عقدة. يرجى التأكد من أن عقدتك تتضمن كلاً من عميل التنفيذ وعميل الإجماع. إذا لم تكن عقدتك على جهازك المحلي (على سبيل المثال، تعمل عقدتك على مثيل AWS)، فقم بتحديث عناوين IP في البرنامج التعليمي وفقًا لذلك. لمزيد من المعلومات، يرجى الاطلاع على صفحتنا حول تشغيل عقدة.
المتطلبات الأساسية
بالإضافة إلى فهم JavaScript، قد يكون من المفيد فهم حزمة إيثيريوم وعملاء إيثيريوم.
لماذا تستخدم مكتبة؟
تعمل هذه المكتبات على تجريد الكثير من تعقيدات التفاعل المباشر مع عقدة إيثيريوم. كما أنها توفر وظائف مساعدة (على سبيل المثال، تحويل ETH إلى Gwei) بحيث يمكنك كمطور قضاء وقت أقل في التعامل مع تعقيدات عملاء إيثيريوم ومزيد من الوقت في التركيز على الوظائف الفريدة لتطبيقك.
ميزات المكتبة
الاتصال بعقد إيثيريوم
باستخدام المزودين، تتيح لك هذه المكتبات الاتصال بإيثيريوم وقراءة بياناته، سواء كان ذلك عبر JSON-RPC أو Infura أو Etherscan أو Alchemy أو ميتاماسك.
تحذير: تمت أرشفة Web3.js في March 4, 2025. اقرأ الإعلان (opens in a new tab). فكر في استخدام مكتبات بديلة مثل Ethers.js (opens in a new tab) أو Viem (opens in a new tab) للمشاريع الجديدة.
مثال Ethers
// يغلف BrowserProvider مزود Web3 قياسي، وهو
// ما يحقنه ميتاماسك كـ window.ethereum في كل صفحة
const provider = new ethers.BrowserProvider(window.ethereum)
// تسمح إضافة ميتاماسك أيضًا بتوقيع المعاملات لـ
// إرسال الإيثر والدفع لتغيير الحالة داخل سلسلة الكتل.
// لهذا، نحتاج إلى موقع الحساب...
const signer = provider.getSigner()
مثال Web3js
var web3 = new Web3("http://localhost:8545")
// أو
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
// تغيير المزود
web3.setProvider("ws://localhost:8546")
// أو
web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
// استخدام مزود IPC في node.js
var net = require("net")
var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // مسار mac os
// or
var web3 = new Web3(
new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
) // مسار mac os
// في windows المسار هو: "\\\\.\\pipe\\geth.ipc"
// في linux المسار هو: "/users/myuser/.ethereum/geth.ipc"
بمجرد الإعداد، ستتمكن من الاستعلام من سلسلة الكتل عن:
- أرقام الكتل
- تقديرات الغاز
- أحداث العقد الذكي
- معرف الشبكة
- والمزيد...
وظائف المحفظة
تمنحك هذه المكتبات وظائف لإنشاء محافظ وإدارة المفاتيح وتوقيع المعاملات.
إليك مثال من Ethers
// إنشاء مثيل محفظة من عبارة تذكيرية...
mnemonic =
"announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
walletMnemonic = Wallet.fromPhrase(mnemonic)
// ...أو من مفتاح خاص
walletPrivateKey = new Wallet(walletMnemonic.privateKey)
walletMnemonic.address === walletPrivateKey.address
// true
// العنوان كـ Promise وفقًا لـ API الموقع
walletMnemonic.getAddress()
// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
// عنوان المحفظة متاح أيضًا بشكل متزامن
walletMnemonic.address
// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
// المكونات التشفيرية الداخلية
walletMnemonic.privateKey
// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
walletMnemonic.publicKey
// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
// العبارة التذكيرية للمحفظة
walletMnemonic.mnemonic
// {
// locale: 'en',
// path: 'm/44\'/60\'/0\'/0/0',
// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
// }
// ملاحظة: المحفظة المنشأة باستخدام مفتاح خاص لا
// تحتوي على عبارة تذكيرية (الاشتقاق يمنع ذلك)
walletPrivateKey.mnemonic
// null
// توقيع رسالة
walletMnemonic.signMessage("Hello World")
// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
tx = {
to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
value: utils.parseEther("1.0"),
}
// توقيع معاملة
walletMnemonic.signTransaction(tx)
// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
// تُرجع طريقة connect مثيلاً جديدًا من
// المحفظة المتصلة بمزود
wallet = walletMnemonic.connect(provider)
// الاستعلام من الشبكة
wallet.getBalance()
// { Promise: { BigNumber: "42" } }
wallet.getTransactionCount()
// { Promise: 0 }
// إرسال الإيثر
wallet.sendTransaction(tx)
اقرأ المستندات الكاملة (opens in a new tab)
بمجرد الإعداد ستتمكن من:
- إنشاء حسابات
- إرسال معاملات
- توقيع معاملات
- والمزيد...
التفاعل مع وظائف العقد الذكي
تتيح مكتبات عميل JavaScript لتطبيقك استدعاء وظائف العقد الذكي من خلال قراءة واجهة التطبيق الثنائية (ABI) لعقد مجمع.
تشرح ABI بشكل أساسي وظائف العقد بتنسيق JSON وتسمح لك باستخدامها ككائن JavaScript عادي.
لذا فإن عقد Solidity التالي:
contract Test {
uint a;
address d = 0x12345678901234567890123456789012;
constructor(uint testInt) { a = testInt;}
event Event(uint indexed b, bytes32 c);
event Event2(uint indexed b, bytes32 c);
function foo(uint b, bytes32 c) returns(address) {
Event(b, c);
return d;
}
}
سينتج عنه JSON التالي:
[{
"type":"constructor",
"payable":false,
"stateMutability":"nonpayable"
"inputs":[{"name":"testInt","type":"uint256"}],
},{
"type":"function",
"name":"foo",
"constant":false,
"payable":false,
"stateMutability":"nonpayable",
"inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
"outputs":[{"name":"","type":"address"}]
},{
"type":"event",
"name":"Event",
"inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
"anonymous":false
},{
"type":"event",
"name":"Event2",
"inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
"anonymous":false
}]
هذا يعني أنه يمكنك:
- إرسال معاملة إلى العقد الذكي وتنفيذ طريقته
- الاستدعاء لتقدير الغاز الذي سيستغرقه تنفيذ الطريقة عند تنفيذها في جهاز إيثيريوم الظاهري (EVM)
- نشر عقد
- والمزيد...
الوظائف المساعدة
تمنحك الوظائف المساعدة اختصارات مفيدة تجعل البناء باستخدام إيثيريوم أسهل قليلاً.
قيم ETH تكون بـ Wei افتراضيًا. 1 ETH = 1,000,000,000,000,000,000 WEI – هذا يعني أنك تتعامل مع الكثير من الأرقام! web3.utils.toWei يحول الإيثر إلى Wei من أجلك.
وفي Ethers يبدو الأمر هكذا:
// الحصول على رصيد حساب (عن طريق العنوان أو اسم ENS)
balance = await provider.getBalance("ethers.eth")
// { BigNumber: "2337132817842795605" }
// غالبًا ما ستحتاج إلى تنسيق المخرجات للمستخدم
// الذي يفضل رؤية القيم بالإيثر (بدلاً من Wei)
ethers.utils.formatEther(balance)
// '2.337132817842795605'
المكتبات المتاحة
Web3.js - واجهة برمجة تطبيقات JavaScript لإيثيريوم.
Ethers.js - تنفيذ كامل لمحفظة إيثيريوم وأدوات مساعدة في JavaScript وTypeScript.
- الصفحة الرئيسية لـ Ethers.js (opens in a new tab)
- المستندات (opens in a new tab)
- GitHub (opens in a new tab)
The Graph - بروتوكول لفهرسة بيانات إيثيريوم وIPFS والاستعلام عنها باستخدام GraphQL.
- The Graph (opens in a new tab)
- مستكشف Graph (opens in a new tab)
- المستندات (opens in a new tab)
- GitHub (opens in a new tab)
- ديسكورد (opens in a new tab)
Alchemy SDK - غلاف حول Ethers.js مع واجهات برمجة تطبيقات محسنة.
Viem - واجهة TypeScript لإيثيريوم.
Codex - واجهة برمجة تطبيقات لبيانات سلسلة الكتل المثرية في الوقت الفعلي عبر عشرات السلاسل.
- المستندات (opens in a new tab)
- المستكشف (opens in a new tab)
- GitHub (opens in a new tab)
- ديسكورد (opens in a new tab)
Drift - مكتبة وصفية لـ TypeScript مع تخزين مؤقت مدمج، وخطافات، ونماذج اختبار وهمية.
قراءة إضافية
هل تعرف موردًا مجتمعيًا ساعدك؟ قم بتعديل هذه الصفحة وأضفه!
مواضيع ذات صلة
برامج تعليمية ذات صلة
- إعداد Web3js لاستخدام سلسلة الكتل لإيثيريوم في JavaScript – إرشادات لإعداد Web3.js في مشروعك.
- استدعاء عقد ذكي من JavaScript – باستخدام الرمز المميز DAI، تعرف على كيفية استدعاء وظيفة العقود باستخدام JavaScript.
- إرسال المعاملات باستخدام Web3 وAlchemy – إرشادات خطوة بخطوة لإرسال المعاملات من الواجهة الخلفية.
برامج تعليمية: واجهات برمجة تطبيقات JavaScript وWebSockets على إيثيريوم
- استخدام WebSockets – كيفية استخدام WebSockets مع Alchemy للاشتراك في أحداث إيثيريوم وإجراء طلبات JSON-RPC في الوقت الفعلي.