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

إعداد ⁦web3.js⁩ لاستخدام سلسلة كتل إيثيريوم في ⁦JavaScript⁩

web3.js
JavaScript
مبتدئ
jdourlens
11 أبريل 2020
3 دقيقة للقراءة

في هذا البرنامج التعليمي، سنرى كيفية البدء باستخدام web3.js (opens in a new tab) للتفاعل مع سلسلة كتل إيثيريوم. يمكن استخدام Web3.js في كل من الواجهات الأمامية والخلفية لقراءة البيانات من سلسلة الكتل أو إجراء المعاملات وحتى نشر العقود الذكية.

الخطوة الأولى هي تضمين web3.js في مشروعك. لاستخدامها في صفحة ويب، يمكنك استيراد المكتبة مباشرة باستخدام شبكة توصيل المحتوى (CDN) مثل JSDeliver.

<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>

إذا كنت تفضل تثبيت المكتبة لاستخدامها في الواجهة الخلفية أو مشروع واجهة أمامية يستخدم عملية بناء، فيمكنك تثبيتها باستخدام npm:

npm install web3 --save

ثم لاستيراد Web3.js إلى برنامج نصي في Node.js أو مشروع واجهة أمامية يستخدم Browserify، يمكنك استخدام سطر JavaScript التالي:

const Web3 = require("web3")

الآن بعد أن قمنا بتضمين المكتبة في المشروع، نحتاج إلى تهيئتها. يجب أن يكون مشروعك قادرًا على التواصل مع سلسلة الكتل. تتواصل معظم مكتبات إيثيريوم مع عقدة من خلال استدعاءات RPC. لبدء مزود Web3 الخاص بنا، سنقوم بإنشاء مثيل Web3 وتمرير عنوان URL الخاص بالمزود كـ مُنشئ. إذا كان لديك عقدة أو مثيل Ganache يعمل على جهاز الكمبيوتر الخاص بك (opens in a new tab)، فسيبدو الأمر هكذا:

const web3 = new Web3("http://localhost:8545")

إذا كنت ترغب في الوصول مباشرة إلى عقدة مستضافة، يمكنك العثور على خيارات في العقد كخدمة.

const web3 = new Web3("https://cloudflare-eth.com")

لاختبار أننا قمنا بتكوين مثيل Web3 الخاص بنا بشكل صحيح، سنحاول استرداد أحدث رقم كتلة باستخدام الدالة getBlockNumber. تقبل هذه الدالة استدعاءً (callback) كمعلمة وتُرجع رقم الكتلة كعدد صحيح.

var Web3 = require("web3")
const web3 = new Web3("https://cloudflare-eth.com")

web3.eth.getBlockNumber(function (error, result) {
  console.log(result)
})

إذا قمت بتنفيذ هذا البرنامج، فسيقوم ببساطة بطباعة أحدث رقم كتلة: قمة سلسلة الكتل. يمكنك أيضًا استخدام استدعاءات الدالة await/async لتجنب تداخل الاستدعاءات (callbacks) في الكود الخاص بك:

async function getBlockNumber() {
  const latestBlockNumber = await web3.eth.getBlockNumber()
  console.log(latestBlockNumber)
  return latestBlockNumber
}

getBlockNumber()

يمكنك رؤية جميع الدوال المتاحة في مثيل Web3 في وثائق web3.js الرسمية (opens in a new tab).

معظم مكتبات Web3 غير متزامنة (asynchronous) لأنه في الخلفية تقوم المكتبة بإجراء استدعاءات JSON-RPC إلى العقدة التي ترسل النتيجة مرة أخرى.


إذا كنت تعمل في المتصفح، فإن بعض المحافظ تقوم بحقن مثيل Web3 مباشرة ويجب أن تحاول استخدامه كلما أمكن ذلك، خاصة إذا كنت تخطط للتفاعل مع عنوان إيثيريوم الخاص بالمستخدم لإجراء المعاملات.

إليك المقتطف البرمجي لاكتشاف ما إذا كانت محفظة ميتاماسك متاحة ومحاولة تمكينها إذا كانت كذلك. سيسمح لك لاحقًا بقراءة رصيد المستخدم وتمكينه من التحقق من صحة المعاملات التي ترغب في جعله يقوم بها على سلسلة كتل إيثيريوم:

توجد بدائل لـ web3.js مثل Ethers.js (opens in a new tab) وهي شائعة الاستخدام أيضًا. في البرنامج التعليمي التالي سنرى كيفية الاستماع بسهولة إلى الكتل الواردة الجديدة على سلسلة الكتل ومعرفة ما تحتويه (opens in a new tab).