تخطٍ إلى المحتوى الرئيسي
Change page

مكتبات واجهات برمجة التطبيقات بلغة جافا سكريبت

آخر تحديث للصفحة: 25 فبراير 2026

لكي يتمكن تطبيق الويب من التفاعل مع بلوكتشين إيثريوم (أي قراءة بيانات البلوكتشين و/أو إرسال المعاملات إلى الشبكة)، يجب أن يتصل بعقدة إيثريوم.

لهذا الغرض، يقوم كل عميل إيثريوم بتنفيذ مواصفات JSON-RPC، لذلك هناك مجموعة موحدة من الأساليب التي يمكن للتطبيقات الاعتماد عليها.

إذا كنت ترغب في استخدام جافا سكريبت للاتصال بعقدة إيثريوم، يمكنك استعمال لغة جافا سكريبت العادية، ولكن تتوفر داخل النظام عدة مكتبات ملائمة تسهّل هذه العملية بشكل كبير. مع هذه المكتبات، بوسع المطورين كتابة طرق ذكية من سطر واحد لتهيئة طلبات JSON RPC (في الخلفية) التي تتفاعل مع إيثريوم.

يرجى ملاحظة أنه منذ الدمج، هناك حاجة إلى جزأين متصلين من برامج إيثريوم - عميل تنفيذ وعميل إجماع - لتشغيل عقدة. يرجى التأكد من أن عقدتك تحتوي على كلٍّ من عميل التنفيذ وعميل الإجماع. إذا لم تكن عقدتك على جهازك المحلي (على سبيل المثال، تعمل عقدتك على مثيل AWS) فقم بتحديث عناوين IP في البرنامج التعليمي وفقًا لذلك. لمزيد من المعلومات، يرجى الاطلاع على صفحتنا حول تشغيل عقدة.

المتطلبات الأساسية

بالإضافة إلى فهم جافا سكريبت، قد يكون من المفيد فهم حزمة إيثريوم وعملاء إيثريوم.

ما نفع المكتبة؟

تخفف هذه المكتبات إلى حد كبير من تعقيد التفاعل المباشر مع عقدة إيثريوم. كما أنها توفر وظائف مساعِدة (كتحويل ETH إلى Gwei) تتيح لك كمطوّر قضاء وقت أقل في التعامل مع تعقيدات عملاء إيثريوم والتركيز لوقت أطول على وظيفة تطبيقك الفريدة.

ميزات المكتبة

الاتصال بعقد إيثريوم

تستخدم هذه المكتبات المزودين لتتيح لك بالاتصال بـ إيثريوم وقراءة بياناته، سواء كان ذلك عبر JSON-RPC أو INFURA أو إيثرسكان أو ألكيمي أو ميتاماسك.

تحذير: تمت أرشفة ويب3.جي إس في 4 مارس 2025. اقرأ الإعلان (opens in a new tab). فكر في استخدام مكتبات بديلة مثل ethers.js (opens in a new tab) أو viem (opens in a new tab) للمشاريع الجديدة.

مثال عن Ethers

1// يغلف BrowserProvider مزود Web3 قياسي، وهو
2// ما يضيفه MetaMask كـ window.ethereum في كل صفحة
3const provider = new ethers.BrowserProvider(window.ethereum)
4
5// يسمح المكون الإضافي MetaMask أيضًا بتوقيع المعاملات
6// لإرسال الإيثر والدفع لتغيير الحالة داخل البلوكتشين.
7// لهذا، نحن بحاجة إلى موقّع الحساب...
8const signer = provider.getSigner()

مثال عن Web3js

1var web3 = new Web3("http://localhost:8545")
2/ أو
3var web3 = new Web3(New Web3.providers.HttpProvider("http://localhost:8545"))
4
5// تغيير المزود
6web3.setProvider("ws://localhost:8546")
7// أو
8web3.setProvider(new web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// استخدام مزود خدمة الاتصال بين العمليات (IPC) في node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth. ipc", net) // مسار نظام التشغيل على mac
13// أو
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // مسار نظام التشغيل على mac
17// المسار على Windows هو: "\\\\.\\pipe\\geth.ipc"
18/ المسار على linux هو: "/users/myuser/.ethereum/geth.ipc"
إظهار الكل

بعد الانتهاء من الإعداد، يصبح بإمكانك الاستعلام من سلسلة الكتل عن:

  • أرقام الكتلة
  • تقديرات الغاز
  • أحداث العقود الذكية
  • هوية الشبكة
  • وغير ذلك...

وظيفة المحفظة

تمنحك هذه المكتبات الوظائف اللازمة لإنشاء المحافظ وإدارة المفاتيح وتوقيع المعاملات.

إليك أمثلة من Ethers

1// إنشاء نسخة محفظة من عبارة استذكارية...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromPhrase(mnemonic)
5
6// ... أو من مفتاح خاص
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// صحيح
11
12// العنوان كوعد حسب واجهة برمجة تطبيقات الموقّع
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// عنوان المحفظة متاح أيضًا بشكل متزامن
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// مكونات التشفير الداخلية
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// عبارة المحفظة الاستذكارية
27walletMnemonic.mnemonic
28// {
29// locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// }
33
34// ملاحظة: المحفظة التي تم إنشاؤها بمفتاح خاص لا تحتوي على
35// عبارة استذكارية (الاشتقاق يمنع ذلك)
36walletPrivateKey.mnemonic
37// null
38
39// توقيع رسالة
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// توقيع معاملة
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// تعيد طريقة الاتصال نسخة جديدة من
53// المحفظة المتصلة بمزود
54wallet = walletMnemonic.connect(provider)
55
56// الاستعلام من الشبكة
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// إرسال الإيثر
63wallet.sendTransaction(tx)
إظهار الكل

اقرأ التوثيق الكامل (opens in a new tab)

بعد الانتهاء من الإعداد، يمكنك:

  • إنشاء حسابات
  • إرسال المعاملات
  • توقيع المعاملات
  • وغير ذلك...

التفاعل مع دوال العقود الذكية

تُتيح مكتبات جافا سكريبت لتطبيقك استدعاء وظائف العقود الذكية من خلال قراءة واجهة التطبيق الثنائية (ABI) الخاصة بالعقد بعد عملية ترجمة (Compilation) العقد.

تشرح واجهة التطبيق الثنائية وظائف العقد بصيغة JSON وتتيح لك استخدامه كأي شيء عادي بلغة جافا سكريبت.

لذا فإن عقد سوليديتي التالي:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 constructor(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 function foo(uint b, bytes32 c) returns(address) {
12 Event(b, c);
13 return d;
14 }
15}
إظهار الكل

ينتج JSON التالي:

1[{
2 "type":"constructor",
3 "payable":false,
4 "stateMutability":"nonpayable"
5 "inputs":[{"name":"testInt","type":"uint256"}],
6 },{
7 "type":"function",
8 "name":"foo",
9 "constant":false,
10 "payable":false,
11 "stateMutability":"nonpayable",
12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
13 "outputs":[{"name":"","type":"address"}]
14 },{
15 "type":"event",
16 "name":"Event",
17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
18 "anonymous":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]
إظهار الكل

وهذا يعني أنك تستطيع:

  • إرسال معاملة إلى العقد الذكي وتنفيذ طريقته
  • الاتصال لتقدير الغاز الذي يحتاجه تنفيذ الطريقة عند تنفيذها في آلة إيثريوم الافتراضية
  • نشر العقود
  • وغير ذلك...

الوظائف المساعدة

تمنحك الوظائف المساعِدة اختصارات مفيدة تسهّل بعض الشيء عملية البناء باستخدام إيثريوم.

تأتي قيم ETH بفئة واي بشكل افتراضي. كل ETH واحد يعادل 1,000,000,000,000,000,000,000 WEI - هذا يعني أنك تتعامل مع الكثير من الأرقام! web3.utils.toWei يحول الإيثر إلى Wei من أجلك.

وتبدو القيمة بـether على الشكل التالي:

1// احصل على رصيد حساب (عن طريق العنوان أو اسم ENS)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" }
4
5// ستحتاج غالبًا إلى تنسيق المُخرج للمستخدم
6// الذي يفضل رؤية القيم بـ ether (بدلاً من wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'

المكتبات المتاحة

ويب3.جي إس - واجهة برمجة تطبيقات إيثريوم جافا سكريبت.

إيثرز.جي إس - تنفيذ محفظة إيثريوم بالكامل مع الأدوات المساعدة باستخدام جافا سكريبت و تايب سكريبت.

ذا غراف - بروتوكول لفهرسة بيانات إيثريوم و آي بي إف إس والاستعلام عنها باستخدام جراف كيو إل.

ألكيمي SDK - غلاف حول إيثرز.جي إس مع واجهات برمجة تطبيقات محسّنة.

viem - واجهة تايب سكريبت لـ إيثريوم.

Drift - مكتبة تعريفية بلغة تايب سكريبت مع تخزين مؤقت مدمج وخطافات ومحاكاة اختبار.

قراءة إضافية

هل تعرف أحد الموارد المجتمعية التي ساعدتك؟ عدّل هذه الصفحة وأضفه!

هل كانت هذه المقالة مفيدة؟