واجهة برمجة تطبيقات JSON-RPC
آخر تحديث للصفحة: 23 فبراير 2026
لكي يتفاعل تطبيق برمجي مع البلوك تشين الخاص بـ إيثريوم - إما عن طريق قراءة بيانات البلوك تشين أو إرسال المعاملات إلى شبكة - يجب أن يتصل بـ عقدة إيثريوم.
لهذا الغرض، يطبق كل عميل إيثريوم مواصفات JSON-RPC (opens in a new tab)، بحيث تكون هناك مجموعة موحدة من الطرق التي يمكن للتطبيقات الاعتماد عليها بغض النظر عن العقدة المحددة أو تنفيذ العميل.
JSON-RPC (opens in a new tab) هو بروتوكول استدعاء الإجراء عن بُعد (RPC) خفيف الوزن وعديم الحالة. يحدد العديد من هياكل البيانات والقواعد المتعلقة بمعالجتها. وهو مستقل عن وسيلة النقل حيث يمكن استخدام المفاهيم داخل نفس العملية، أو عبر مآخذ التوصيل (sockets)، أو عبر HTTP، أو في العديد من بيئات تمرير الرسائل المختلفة. يستخدم JSON (RFC 4627) كتنسيق للبيانات.
تنفيذات العميل
قد يستخدم كل من عملاء إيثريوم لغات برمجة مختلفة عند تنفيذ مواصفات JSON-RPC. راجع وثائق كل عميل لمزيد من التفاصيل المتعلقة بلغات برمجة محددة. نوصي بمراجعة وثائق كل عميل للحصول على أحدث المعلومات حول دعم واجهة برمجة التطبيقات (API).
مكتبات التسهيل
بينما يمكنك اختيار التفاعل مباشرة مع عملاء إيثريوم عبر واجهة برمجة تطبيقات JSON-RPC، غالبًا ما تكون هناك خيارات أسهل لمطوري التطبيقات اللامركزية. توجد العديد من مكتبات JavaScript وواجهة برمجة تطبيقات الواجهة الخلفية التي توفر واجهات تغليف (wrappers) مبنية على واجهة برمجة تطبيقات JSON-RPC. باستخدام هذه المكتبات، يمكن للمطورين كتابة دوال بديهية من سطر واحد بلغة البرمجة التي يختارونها لتهيئة طلبات JSON-RPC (في الخلفية) والتي تتفاعل مع إيثريوم.
واجهات برمجة تطبيقات عميل الإجماع
تتناول هذه الصفحة بشكل أساسي واجهة برمجة تطبيقات JSON-RPC التي يستخدمها عملاء التنفيذ في إيثريوم. ومع ذلك، يمتلك عملاء الإجماع أيضًا واجهة برمجة تطبيقات RPC تسمح للمستخدمين بالاستعلام عن معلومات حول العقدة، وطلب كتل المنارة، وحالة المنارة، وغيرها من المعلومات المتعلقة بالإجماع مباشرة من العقدة. تم توثيق واجهة برمجة التطبيقات هذه على صفحة واجهة برمجة تطبيقات المنارة (Beacon API) (opens in a new tab).
تُستخدم أيضًا واجهة برمجة تطبيقات داخلية للتواصل بين العملاء داخل العقدة - أي أنها تمكّن عميل الإجماع وعميل التنفيذ من تبادل البيانات. يُطلق على هذا اسم 'Engine API' والمواصفات متاحة على GitHub (opens in a new tab).
مواصفات عميل التنفيذ
اقرأ مواصفات واجهة برمجة تطبيقات JSON-RPC الكاملة على GitHub (opens in a new tab). تم توثيق واجهة برمجة التطبيقات هذه على صفحة الويب الخاصة بواجهة برمجة تطبيقات التنفيذ (opens in a new tab) وتتضمن أداة فحص (Inspector) لتجربة جميع الطرق المتاحة.
الاصطلاحات
ترميز القيمة السداسية العشرية
يتم تمرير نوعين رئيسيين من البيانات عبر JSON: مصفوفات البايت غير المنسقة والكميات. يتم تمرير كلاهما بترميز سداسي عشري ولكن بمتطلبات تنسيق مختلفة.
الكميات
عند ترميز الكميات (الأعداد الصحيحة، الأرقام): قم بترميزها بالنظام السداسي العشري، مع إضافة البادئة "0x"، وهو التمثيل الأكثر إيجازًا (استثناء بسيط: يجب تمثيل الصفر كـ "0x0").
إليك بعض الأمثلة:
- 0x41 (65 بالنظام العشري)
- 0x400 (1024 بالنظام العشري)
- خطأ: 0x (يجب أن يحتوي دائمًا على رقم واحد على الأقل - الصفر هو "0x0")
- خطأ: 0x0400 (لا يُسمح بالأصفار البادئة)
- خطأ: ff (يجب أن يسبقه 0x)
البيانات غير المنسقة
عند ترميز البيانات غير المنسقة (مصفوفات البايت، عناوين الحسابات، التجزئة (هاش)، مصفوفات الرمز الثانوي (bytecode)): قم بترميزها بالنظام السداسي العشري، مع إضافة البادئة "0x"، ورقمين سداسيين عشريين لكل بايت.
إليك بعض الأمثلة:
- 0x41 (الحجم 1، "A")
- 0x004200 (الحجم 3، "0B0")
- 0x (الحجم 0، "")
- خطأ: 0xf0f0f (يجب أن يكون عدد الأرقام زوجيًا)
- خطأ: 004200 (يجب أن يسبقه 0x)
معلمة البلوك
تحتوي الطرق التالية على معلمة بلوك:
عند إجراء طلبات تستعلم عن حالة إيثريوم، تحدد معلمة البلوك المقدمة ارتفاع البلوك.
الخيارات التالية ممكنة لمعلمة البلوك:
HEX String- رقم بلوك صحيحString "earliest"للبلوك الأقدم/التكوينيString "latest"- لأحدث بلوك مقترحString "safe"- لأحدث بلوك رأس آمنString "finalized"- لأحدث بلوك نهائيString "pending"- للحالة/المعاملات المعلقة
أمثلة
نقدم في هذه الصفحة أمثلة على كيفية استخدام نقاط نهاية واجهة برمجة تطبيقات JSON_RPC الفردية باستخدام أداة سطر الأوامر، curl (opens in a new tab). توجد أمثلة نقاط النهاية الفردية هذه أدناه في قسم أمثلة Curl. وفي أسفل الصفحة، نقدم أيضًا مثالاً شاملاً لتجميع ونشر عقد ذكي باستخدام عقدة Geth، وواجهة برمجة تطبيقات JSON_RPC، وcurl.
أمثلة Curl
تتوفر أدناه أمثلة على استخدام واجهة برمجة تطبيقات JSON_RPC من خلال إجراء طلبات curl (opens in a new tab) إلى عقدة إيثريوم. يتضمن كل مثال وصفًا لنقطة النهاية المحددة، ومعلماتها، ونوع الإرجاع، ومثالًا عمليًا لكيفية استخدامها.
قد تُرجع طلبات curl رسالة خطأ تتعلق بنوع المحتوى. ويرجع ذلك إلى أن خيار --data يعين نوع المحتوى إلى application/x-www-form-urlencoded. إذا كانت عقدتك تبلغ عن خطأ بخصوص هذا، فقم بتعيين الترويسة يدويًا عن طريق وضع -H "Content-Type: application/json" في بداية الاستدعاء. لا تتضمن الأمثلة أيضًا مجموعة عنوان URL/IP والمنفذ والتي يجب أن تكون الوسيطة الأخيرة المعطاة لـ curl (على سبيل المثال، 127.0.0.1:8545). يأخذ طلب curl الكامل الذي يتضمن هذه البيانات الإضافية الشكل التالي:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545النشر (Gossip)، الحالة، التاريخ
تتطلب مجموعة من طرق JSON-RPC الأساسية بيانات من شبكة إيثريوم، وتندرج بدقة في ثلاث فئات رئيسية: النشر (Gossip)، والحالة، والتاريخ. استخدم الروابط في هذه الأقسام للانتقال إلى كل طريقة، أو استخدم جدول المحتويات لاستكشاف القائمة الكاملة للطرق.
طرق النشر (Gossip)
تتتبع هذه الطرق رأس السلسلة. هذه هي الطريقة التي تشق بها المعاملات طريقها عبر الشبكة، وتجد طريقها إلى الكتل، وكيف يكتشف العملاء الكتل الجديدة.
طرق الحالة
الطرق التي تبلغ عن الحالة الحالية لجميع البيانات المخزنة. تشبه "الحالة" قطعة كبيرة مشتركة من ذاكرة الوصول العشوائي (RAM)، وتتضمن أرصدة الحسابات، وبيانات العقود، وتقديرات الغاز.
طرق التاريخ
تجلب السجلات التاريخية لكل كتلة وصولاً إلى كتلة التكوين (genesis). يشبه هذا ملفًا كبيرًا للإلحاق فقط، ويتضمن جميع ترويسات الكتل، وأجسام الكتل، وكتل العم (uncle blocks)، وإيصالات المعاملات.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
ساحة تجارب واجهة برمجة تطبيقات JSON-RPC
يمكنك استخدام أداة ساحة التجارب (opens in a new tab) لاكتشاف وتجربة طرق واجهة برمجة التطبيقات (API). كما توضح لك الطرق والشبكات المدعومة من قِبل مختلف مزودي العقد.
طرق واجهة برمجة تطبيقات JSON-RPC
web3_clientVersion
يُرجع إصدار العميل الحالي.
المعلمات
لا يوجد
المرتجعات
String - إصدار العميل الحالي
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result // النتيجة4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}web3_sha3
يُرجع Keccak-256 (وليس SHA3-256 القياسي) للبيانات المحددة.
المعلمات
DATA- البيانات المراد تحويلها إلى التجزئة (هاش) SHA3
1params: ["0x68656c6c6f20776f726c64"]المرتجعات
DATA - نتيجة SHA3 للسلسلة المحددة.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result // النتيجة4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}net_version
يُرجع مُعرّف الشبكة الحالي.
المعلمات
لا يوجد
المرتجعات
String - مُعرّف الشبكة الحالي.
القائمة الكاملة لمُعرّفات الشبكة الحالية متاحة على chainlist.org (opens in a new tab). بعض المُعرّفات الشائعة هي:
1: الشبكة الرئيسية لإيثريوم (Ethereum Mainnet)11155111: شبكة الاختبار Sepolia560048: شبكة الاختبار Hoodi
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result // النتيجة4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}net_listening
يُرجع true إذا كان العميل يستمع بنشاط لاتصالات الشبكة.
المعلمات
لا يوجد
المرتجعات
Boolean - true عند الاستماع، وإلا false.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result // النتيجة4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}net_peerCount
يُرجع عدد الأقران المتصلين حاليًا بالعميل.
المعلمات
لا يوجد
المرتجعات
QUANTITY - عدد صحيح لعدد الأقران المتصلين.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result // النتيجة4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 2 // 28}eth_protocolVersion
يُرجع إصدار بروتوكول إيثريوم الحالي. لاحظ أن هذه الطريقة غير متوفرة في Geth (opens in a new tab).
المعلمات
لا يوجد
المرتجعات
String - إصدار بروتوكول إيثريوم الحالي
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result // النتيجة4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}eth_syncing
يُرجع كائنًا يحتوي على بيانات حول حالة المزامنة أو false.
المعلمات
لا يوجد
المرتجعات
تختلف بيانات الإرجاع الدقيقة بين تطبيقات العميل. تُرجع جميع العملاء False عندما لا تقوم العقدة بالمزامنة، وتُرجع جميع العملاء الحقول التالية.
Object|Boolean، كائن يحتوي على بيانات حالة المزامنة أو FALSE، عند عدم المزامنة:
startingBlock:QUANTITY- البلوك الذي بدأ عنده الاستيراد (سيتم إعادة تعيينه فقط، بعد أن تصل المزامنة إلى رأسها)currentBlock:QUANTITY- البلوك الحالي، نفس eth_blockNumberhighestBlock:QUANTITY- أعلى بلوك مُقدّر
ومع ذلك، قد توفر العملاء الفردية أيضًا بيانات إضافية. على سبيل المثال، يُرجع Geth ما يلي:
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": {5 "currentBlock": "0x3cf522",6 "healedBytecodeBytes": "0x0",7 "healedBytecodes": "0x0",8 "healedTrienodes": "0x0",9 "healingBytecode": "0x0",10 "healingTrienodes": "0x0",11 "highestBlock": "0x3e0e41",12 "startingBlock": "0x3cbed5",13 "syncedAccountBytes": "0x0",14 "syncedAccounts": "0x0",15 "syncedBytecodeBytes": "0x0",16 "syncedBytecodes": "0x0",17 "syncedStorage": "0x0",18 "syncedStorageBytes": "0x0"19 }20}إظهار الكلبينما يُرجع Besu:
1{2 "jsonrpc": "2.0",3 "id": 51,4 "result": {5 "startingBlock": "0x0",6 "currentBlock": "0x1518",7 "highestBlock": "0x9567a3",8 "pulledStates": "0x203ca",9 "knownStates": "0x200636"10 }11}إظهار الكلراجع الوثائق الخاصة بعميلك لمزيد من التفاصيل.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing // أو عند عدم المزامنة14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}إظهار الكلeth_coinbase
يُرجع عنوان coinbase للعميل.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)ملاحظة: تم إيقاف هذه الطريقة اعتبارًا من الإصدار v1.14.0 ولم تعد مدعومة. ستؤدي محاولة استخدام هذه الطريقة إلى ظهور خطأ "الطريقة غير مدعومة".
المعلمات
لا يوجد
المرتجعات
DATA، 20 بايت - عنوان coinbase الحالي.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result // النتيجة4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}eth_chainId
يُرجع مُعرّف السلسلة المستخدم لتوقيع المعاملات المحمية من إعادة التشغيل.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
لا يوجد
المرتجعات
chainId، قيمة سداسية عشرية كسلسلة تمثل العدد الصحيح لمُعرّف السلسلة الحالي.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Result // النتيجة4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}eth_mining
يُرجع true إذا كان العميل يقوم بتعدين كتل جديدة بنشاط. يمكن أن يُرجع هذا true فقط لشبكات إثبات العمل وقد لا يكون متاحًا في بعض العملاء منذ الدمج.
المعلمات
لا يوجد
المرتجعات
Boolean - يُرجع true إذا كان العميل يقوم بالتعدين، وإلا false.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}eth_hashrate
يُرجع عدد التجزئات في الثانية التي تقوم العقدة بالتعدين بها. يمكن أن يُرجع هذا true فقط لشبكات إثبات العمل وقد لا يكون متاحًا في بعض العملاء منذ الدمج.
المعلمات
لا يوجد
المرتجعات
QUANTITY - عدد التجزئات في الثانية.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result // النتيجة4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}eth_gasPrice
يُرجع تقديرًا لسعر الغاز الحالي بوحدة wei. على سبيل المثال، يفحص عميل Besu آخر 100 بلوك ويُرجع متوسط سعر وحدة الغاز افتراضيًا.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
لا يوجد
المرتجعات
QUANTITY - عدد صحيح لسعر الغاز الحالي بوحدة wei.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result // النتيجة4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei // 8049999872 Wei8}eth_accounts
يُرجع قائمة بالعناوين المملوكة للعميل.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
لا يوجد
المرتجعات
Array of DATA، 20 بايت - العناوين المملوكة للعميل.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}eth_blockNumber
يُرجع رقم أحدث بلوك.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
لا يوجد
المرتجعات
QUANTITY - عدد صحيح لرقم البلوك الحالي الذي يتواجد عليه العميل.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result // النتيجة4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 1207 // 12078}eth_getBalance
يُرجع رصيد الحساب في عنوان محدد.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 20 بايت - العنوان للتحقق من الرصيد.QUANTITY|TAG- عدد صحيح لرقم البلوك، أو السلسلة"latest"،"earliest"،"pending"،"safe"، أو"finalized"، راجع معلمة البلوك
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]المرتجعات
QUANTITY - عدد صحيح للرصيد الحالي بوحدة wei.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 158972490234375000 // 1589724902343750008}eth_getStorageAt
يُرجع القيمة من موضع تخزين في عنوان محدد.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 20 بايت - عنوان التخزين.QUANTITY- عدد صحيح للموضع في التخزين.QUANTITY|TAG- عدد صحيح لرقم البلوك، أو السلسلة"latest"،"earliest"،"pending"،"safe"،"finalized"، راجع معلمة البلوك
المرتجعات
DATA - القيمة في موضع التخزين هذا.
مثال
يعتمد حساب الموضع الصحيح على التخزين المراد استرداده. ضع في اعتبارك العقد التالي المنشور في 0x295a70b2de5e3953354a6a8344e616ed314d7251 بواسطة العنوان 0x391694e7e0b0cce554cb130d723a9d27458f9298.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 constructor() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}استرداد قيمة pos0 أمر مباشر:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}استرداد عنصر من الخريطة (map) أصعب. يتم حساب موضع عنصر في الخريطة باستخدام:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))هذا يعني أنه لاسترداد التخزين في pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] نحتاج إلى حساب الموضع باستخدام:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)يمكن استخدام وحدة تحكم geth التي تأتي مع مكتبة web3 لإجراء الحساب:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"الآن لجلب التخزين:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}eth_getTransactionCount
يُرجع عدد المعاملات المرسلة من عنوان.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 20 بايت - العنوان.QUANTITY|TAG- عدد صحيح لرقم البلوك، أو السلسلة"latest"،"earliest"،"pending"،"safe"أو"finalized"، راجع معلمة البلوك
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block // الحالة عند أحدث كتلة4]المرتجعات
QUANTITY - عدد صحيح لعدد المعاملات المرسلة من هذا العنوان.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_getBlockTransactionCountByHash
يُرجع عدد المعاملات في بلوك من بلوك يطابق تجزئة (هاش) البلوك المحددة.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 32 بايت - التجزئة (هاش) لبلوك
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]المرتجعات
QUANTITY - عدد صحيح لعدد المعاملات في هذا البلوك.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 139 // 1398}eth_getBlockTransactionCountByNumber
يُرجع عدد المعاملات في بلوك يطابق رقم البلوك المحدد.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
QUANTITY|TAG- عدد صحيح لرقم بلوك، أو السلسلة"earliest"،"latest"،"pending"،"safe"أو"finalized"، كما في معلمة البلوك.
1params: [2 "0x13738ca", // 20396234 // 203962343]المرتجعات
QUANTITY - عدد صحيح لعدد المعاملات في هذا البلوك.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 139 // 1398}eth_getUncleCountByBlockHash
يُرجع عدد كتل العم (uncles) في بلوك من بلوك يطابق تجزئة (هاش) البلوك المحددة.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 32 بايت - التجزئة (هاش) لبلوك
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]المرتجعات
QUANTITY - عدد صحيح لعدد كتل العم في هذا البلوك.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_getUncleCountByBlockNumber
يُرجع عدد كتل العم (uncles) في بلوك من بلوك يطابق رقم البلوك المحدد.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
QUANTITY|TAG- عدد صحيح لرقم بلوك، أو السلسلة"latest"،"earliest"،"pending"،"safe"أو"finalized"، راجع معلمة البلوك
1params: [2 "0xe8", // 232 // 2323]المرتجعات
QUANTITY - عدد صحيح لعدد كتل العم في هذا البلوك.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0" // 0 // 08}eth_getCode
يُرجع الكود في عنوان محدد.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 20 بايت - العنوانQUANTITY|TAG- عدد صحيح لرقم البلوك، أو السلسلة"latest"،"earliest"،"pending"،"safe"أو"finalized"، راجع معلمة البلوك
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 6139707 // 61397074]المرتجعات
DATA - الكود من العنوان المحدد.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"8}eth_sign
تحسب طريقة sign توقيعًا خاصًا بإيثريوم باستخدام: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
من خلال إضافة بادئة إلى الرسالة، يصبح التوقيع المحسوب قابلاً للتعرف عليه كتوقيع خاص بإيثريوم. يمنع هذا سوء الاستخدام حيث يمكن لتطبيق لامركزي خبيث توقيع بيانات عشوائية (مثل معاملة) واستخدام التوقيع لانتحال شخصية الضحية.
ملاحظة: يجب أن يكون العنوان المراد التوقيع به غير مقفل.
المعلمات
DATA، 20 بايت - العنوانDATA، N بايت - الرسالة المراد توقيعها
المرتجعات
DATA: التوقيع
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_signTransaction
يوقع معاملة يمكن إرسالها إلى الشبكة في وقت لاحق باستخدام eth_sendRawTransaction.
المعلمات
Object- كائن المعاملة
type:from:DATA، 20 بايت - العنوان الذي تُرسل منه المعاملة.to:DATA، 20 بايت - (اختياري عند إنشاء عقد جديد) العنوان الموجهة إليه المعاملة.gas:QUANTITY- (اختياري، الافتراضي: 90000) عدد صحيح للغاز المقدم لتنفيذ المعاملة. سيُرجع الغاز غير المستخدم.gasPrice:QUANTITY- (اختياري، الافتراضي: سيتم تحديده) عدد صحيح لسعر الغاز (gasPrice) المستخدم لكل غاز مدفوع، بوحدة Wei.value:QUANTITY- (اختياري) عدد صحيح للقيمة المرسلة مع هذه المعاملة، بوحدة Wei.data:DATA- الكود المترجم لعقد أو التجزئة (هاش) لتوقيع الطريقة المستدعاة والمعلمات المشفرة.nonce:QUANTITY- (اختياري) عدد صحيح لرقم عشوائي (nonce). يسمح هذا بالكتابة فوق معاملاتك المعلقة التي تستخدم نفس الرقم العشوائي.
المرتجعات
DATA، كائن المعاملة المشفر بـ RLP والموقع بواسطة الحساب المحدد.
مثال
1// Request // الطلب2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Result // النتيجة4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_sendTransaction
ينشئ معاملة استدعاء رسالة جديدة أو إنشاء عقد، إذا كان حقل البيانات يحتوي على كود، ويوقعه باستخدام الحساب المحدد في from.
المعلمات
Object- كائن المعاملة
from:DATA، 20 بايت - العنوان الذي تُرسل منه المعاملة.to:DATA، 20 بايت - (اختياري عند إنشاء عقد جديد) العنوان الموجهة إليه المعاملة.gas:QUANTITY- (اختياري، الافتراضي: 90000) عدد صحيح للغاز المقدم لتنفيذ المعاملة. سيُرجع الغاز غير المستخدم.gasPrice:QUANTITY- (اختياري، الافتراضي: سيتم تحديده) عدد صحيح لسعر الغاز (gasPrice) المستخدم لكل غاز مدفوع.value:QUANTITY- (اختياري) عدد صحيح للقيمة المرسلة مع هذه المعاملة.input:DATA- الكود المترجم لعقد أو التجزئة (هاش) لتوقيع الطريقة المستدعاة والمعلمات المشفرة.nonce:QUANTITY- (اختياري) عدد صحيح لرقم عشوائي (nonce). يسمح هذا بالكتابة فوق معاملاتك المعلقة التي تستخدم نفس الرقم العشوائي.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 30400 // 304006 gasPrice: "0x9184e72a000", // 10000000000000 // 100000000000007 value: "0x9184e72a", // 2441406250 // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]إظهار الكلالمرتجعات
DATA، 32 بايت - التجزئة (هاش) للمعاملة، أو تجزئة الصفر إذا لم تكن المعاملة متاحة بعد.
استخدم eth_getTransactionReceipt للحصول على عنوان العقد، بعد اقتراح المعاملة في بلوك، عند إنشاء عقد.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_sendRawTransaction
ينشئ معاملة استدعاء رسالة جديدة أو إنشاء عقد للمعاملات الموقعة.
المعلمات
DATA، بيانات المعاملة الموقعة.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]المرتجعات
DATA، 32 بايت - التجزئة (هاش) للمعاملة، أو تجزئة الصفر إذا لم تكن المعاملة متاحة بعد.
استخدم eth_getTransactionReceipt للحصول على عنوان العقد، بعد اقتراح المعاملة في بلوك، عند إنشاء عقد.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_call
ينفذ استدعاء رسالة جديدًا على الفور دون إنشاء معاملة على البلوك تشين. يُستخدم غالبًا لتنفيذ وظائف العقد الذكي للقراءة فقط، على سبيل المثال balanceOf لعقد ERC-20.
المعلمات
Object- كائن استدعاء المعاملة
from:DATA، 20 بايت - (اختياري) العنوان الذي تُرسل منه المعاملة.to:DATA، 20 بايت - العنوان الموجهة إليه المعاملة.gas:QUANTITY- (اختياري) عدد صحيح للغاز المقدم لتنفيذ المعاملة. يستهلك eth_call صفر غاز، ولكن قد تكون هذه المعلمة مطلوبة لبعض عمليات التنفيذ.gasPrice:QUANTITY- (اختياري) عدد صحيح لسعر الغاز (gasPrice) المستخدم لكل غاز مدفوعvalue:QUANTITY- (اختياري) عدد صحيح للقيمة المرسلة مع هذه المعاملةinput:DATA- (اختياري) التجزئة (هاش) لتوقيع الطريقة والمعلمات المشفرة. للحصول على التفاصيل، راجع واجهة التطبيق الثنائية (ABI) لعقد إيثريوم في وثائق Solidity (opens in a new tab).
QUANTITY|TAG- عدد صحيح لرقم البلوك، أو السلسلة"latest"،"earliest"،"pending"،"safe"أو"finalized"، راجع معلمة البلوك
المرتجعات
DATA - القيمة المرجعة للعقد المنفذ.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}eth_estimateGas
يُنشئ ويُرجع تقديرًا لمقدار الغاز اللازم للسماح باكتمال المعاملة. لن تتم إضافة المعاملة إلى البلوك تشين. لاحظ أن التقدير قد يكون أكثر بكثير من كمية الغاز المستخدمة فعليًا بواسطة المعاملة، لمجموعة متنوعة من الأسباب بما في ذلك آليات آلة إيثريوم الافتراضية (EVM) وأداء العقدة.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
راجع معلمات eth_call، باستثناء أن جميع الخصائص اختيارية. إذا لم يتم تحديد حد الغاز، يستخدم geth حد الغاز للبلوك من البلوك المعلق كحد أقصى. نتيجة لذلك، قد لا يكون التقدير المرجع كافيًا لتنفيذ الاستدعاء/المعاملة عندما تكون كمية الغاز أعلى من حد الغاز للبلوك المعلق.
المرتجعات
QUANTITY - كمية الغاز المستخدمة.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 21000 // 210008}eth_getBlockByHash
يُرجع معلومات حول بلوك بواسطة التجزئة (هاش).
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 32 بايت - التجزئة (هاش) لبلوك.Boolean- إذا كانtrueفإنه يُرجع كائنات المعاملة الكاملة، وإذا كانfalseفإنه يُرجع فقط تجزئات المعاملات.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]المرتجعات
Object - كائن بلوك، أو null عند عدم العثور على بلوك:
number:QUANTITY- رقم البلوك.nullعندما يكون بلوك معلقًا.hash:DATA، 32 بايت - التجزئة (هاش) للبلوك.nullعندما يكون بلوك معلقًا.parentHash:DATA، 32 بايت - التجزئة (هاش) للبلوك الأصل.nonce:DATA، 8 بايت - التجزئة (هاش) لإثبات العمل المُنشأ.nullعندما يكون بلوك معلقًا،0x0لكتل إثبات الحصة (منذ الدمج)sha3Uncles:DATA، 32 بايت - SHA3 لبيانات كتل العم (uncles) في البلوك.logsBloom:DATA، 256 بايت - مرشح بلوم (bloom filter) لسجلات البلوك.nullعندما يكون بلوك معلقًا.transactionsRoot:DATA، 32 بايت - جذر شجرة المعاملات (transaction trie) للبلوك.stateRoot:DATA، 32 بايت - جذر شجرة الحالة (state trie) النهائية للبلوك.receiptsRoot:DATA، 32 بايت - جذر شجرة الإيصالات (receipts trie) للبلوك.miner:DATA، 20 بايت - عنوان المستفيد الذي أُعطيت له مكافآت البلوك.difficulty:QUANTITY- عدد صحيح لصعوبة هذا البلوك.totalDifficulty:QUANTITY- عدد صحيح للصعوبة الإجمالية للسلسلة حتى هذا البلوك.extraData:DATA- حقل "البيانات الإضافية" لهذا البلوك.size:QUANTITY- عدد صحيح لحجم هذا البلوك بالبايت.gasLimit:QUANTITY- الحد الأقصى للغاز المسموح به في هذا البلوك.gasUsed:QUANTITY- إجمالي الغاز المستخدم بواسطة جميع المعاملات في هذا البلوك.timestamp:QUANTITY- الطابع الزمني لـ unix لوقت تجميع البلوك.transactions:Array- مصفوفة من كائنات المعاملة، أو تجزئات معاملات بحجم 32 بايت اعتمادًا على المعلمة الأخيرة المحددة.uncles:Array- مصفوفة من تجزئات كتل العم (uncles).
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Result // النتيجة4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "difficulty": "0x4ea3f27bc",9 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",10 "gasLimit": "0x1388",11 "gasUsed": "0x0",12 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",13 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",14 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",15 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",16 "nonce": "0x689056015818adbe",17 "number": "0x1b4",18 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",19 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",20 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",21 "size": "0x220",22 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",23 "timestamp": "0x55ba467c",24 "totalDifficulty": "0x78ed983323d",25 "transactions": [26 ],27 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",28 "uncles": [29 ]30 }31}إظهار الكلeth_getBlockByNumber
يُرجع معلومات حول بلوك بواسطة رقم البلوك.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
QUANTITY|TAG- عدد صحيح لرقم بلوك، أو السلسلة"earliest"،"latest"،"pending"،"safe"أو"finalized"، كما في معلمة البلوك.Boolean- إذا كانtrueفإنه يُرجع كائنات المعاملة الكاملة، وإذا كانfalseفإنه يُرجع فقط تجزئات المعاملات.
1params: [2 "0x1b4", // 436 // 4363 true,4]المرتجعات راجع eth_getBlockByHash
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'النتيجة راجع eth_getBlockByHash
eth_getTransactionByHash
يُرجع المعلومات حول معاملة مطلوبة بواسطة التجزئة (هاش) للمعاملة.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 32 بايت - التجزئة (هاش) لمعاملة
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]المرتجعات
Object - كائن معاملة، أو null عند عدم العثور على معاملة:
blockHash:DATA، 32 بايت - التجزئة (هاش) للبلوك الذي كانت فيه هذه المعاملة.nullعندما تكون معلقة.blockNumber:QUANTITY- رقم البلوك الذي كانت فيه هذه المعاملة.nullعندما تكون معلقة.from:DATA، 20 بايت - عنوان المرسل.gas:QUANTITY- الغاز المقدم من المرسل.gasPrice:QUANTITY- سعر الغاز المقدم من المرسل بوحدة Wei.hash:DATA، 32 بايت - التجزئة (هاش) للمعاملة.input:DATA- البيانات المرسلة مع المعاملة.nonce:QUANTITY- عدد المعاملات التي أجراها المرسل قبل هذه المعاملة.to:DATA، 20 بايت - عنوان المستلم.nullعندما تكون معاملة إنشاء عقد.transactionIndex:QUANTITY- عدد صحيح لموضع فهرس المعاملات في البلوك.nullعندما تكون معلقة.value:QUANTITY- القيمة المحولة بوحدة Wei.v:QUANTITY- مُعرّف استرداد ECDSAr:QUANTITY- توقيع ECDSA rs:QUANTITY- توقيع ECDSA s
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result // النتيجة4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 6139707 // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 50000 // 5000012 "gasPrice":"0x4a817c800", // 20000000000 // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 21 // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 65 // 6518 "value":"0xf3dbb76162000", // 4290000000000000 // 429000000000000019 "v":"0x25", // 37 // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}إظهار الكلeth_getTransactionByBlockHashAndIndex
يُرجع معلومات حول معاملة بواسطة التجزئة (هاش) للبلوك وموضع فهرس المعاملة.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 32 بايت - التجزئة (هاش) لبلوك.QUANTITY- عدد صحيح لموضع فهرس المعاملة.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 0 // 04]المرتجعات راجع eth_getTransactionByHash
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'النتيجة راجع eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
يُرجع معلومات حول معاملة بواسطة رقم البلوك وموضع فهرس المعاملة.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
QUANTITY|TAG- رقم بلوك، أو السلسلة"earliest"،"latest"،"pending"،"safe"أو"finalized"، كما في معلمة البلوك.QUANTITY- موضع فهرس المعاملة.
1params: [2 "0x9c47cf", // 10241999 // 102419993 "0x24", // 36 // 364]المرتجعات راجع eth_getTransactionByHash
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'النتيجة راجع eth_getTransactionByHash
eth_getTransactionReceipt
يُرجع إيصال معاملة بواسطة التجزئة (هاش) للمعاملة.
ملاحظة الإيصال غير متاح للمعاملات المعلقة.
المعلمات
DATA، 32 بايت - التجزئة (هاش) لمعاملة
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]المرتجعات
Object - كائن إيصال معاملة، أو null عند عدم العثور على إيصال:
transactionHash:DATA، 32 بايت - التجزئة (هاش) للمعاملة.transactionIndex:QUANTITY- عدد صحيح لموضع فهرس المعاملات في البلوك.blockHash:DATA، 32 بايت - التجزئة (هاش) للبلوك الذي كانت فيه هذه المعاملة.blockNumber:QUANTITY- رقم البلوك الذي كانت فيه هذه المعاملة.from:DATA، 20 بايت - عنوان المرسل.to:DATA، 20 بايت - عنوان المستلم. null عندما تكون معاملة إنشاء عقد.cumulativeGasUsed:QUANTITY- إجمالي كمية الغاز المستخدمة عند تنفيذ هذه المعاملة في البلوك.effectiveGasPrice:QUANTITY- مجموع الرسوم الأساسية والإكرامية المدفوعة لكل وحدة غاز.gasUsed:QUANTITY- كمية الغاز المستخدمة بواسطة هذه المعاملة المحددة وحدها.contractAddress:DATA، 20 بايت - عنوان العقد المُنشأ، إذا كانت المعاملة عبارة عن إنشاء عقد، وإلاnull.logs:Array- مصفوفة من كائنات السجل، التي أنشأتها هذه المعاملة.logsBloom:DATA، 256 بايت - مرشح بلوم (Bloom filter) للعملاء الخفيفين لاسترداد السجلات ذات الصلة بسرعة.type:QUANTITY- عدد صحيح لنوع المعاملة،0x0للمعاملات القديمة،0x1لأنواع قائمة الوصول،0x2للرسوم الديناميكية.
كما أنه يُرجع إما :
root:DATA32 بايت لجذر الحالة (state root) بعد المعاملة (قبل بيزنطة)status:QUANTITYإما1(نجاح) أو0(فشل)
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Result // النتيجة4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // string of the address if it was created // سلسلة نصية للعنوان إذا تم إنشاؤه12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // logs as returned by getFilterLogs, etc. // السجلات كما يتم إرجاعها بواسطة getFilterLogs، وما إلى ذلك.18 }],19 "logsBloom": "0x00...0", // 256 byte bloom filter // مرشح بلوم بحجم 256 بايت20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}إظهار الكلeth_getUncleByBlockHashAndIndex
يُرجع معلومات حول كتلة عم (uncle) لبلوك بواسطة التجزئة (هاش) وموضع فهرس كتلة العم.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
DATA، 32 بايت - التجزئة (هاش) لبلوك.QUANTITY- موضع فهرس كتلة العم.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 0 // 04]المرتجعات راجع eth_getBlockByHash
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'النتيجة راجع eth_getBlockByHash
ملاحظة: لا تحتوي كتلة العم على معاملات فردية.
eth_getUncleByBlockNumberAndIndex
يُرجع معلومات حول كتلة عم (uncle) لبلوك بواسطة الرقم وموضع فهرس كتلة العم.
جرب نقطة النهاية في ساحة اللعب (opens in a new tab)المعلمات
QUANTITY|TAG- رقم بلوك، أو السلسلة"earliest"،"latest"،"pending"،"safe"،"finalized"، كما في معلمة البلوك.QUANTITY- موضع فهرس كتلة العم.
1params: [2 "0x29c", // 668 // 6683 "0x0", // 0 // 04]المرتجعات راجع eth_getBlockByHash
ملاحظة: لا تحتوي كتلة العم على معاملات فردية.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'النتيجة راجع eth_getBlockByHash
eth_newFilter
ينشئ كائن مرشح (filter)، بناءً على خيارات المرشح، للإشعار عند تغير الحالة (السجلات). للتحقق مما إذا كانت الحالة قد تغيرت، استدعِ eth_getFilterChanges.
ملاحظة حول تحديد مرشحات المواضيع: المواضيع تعتمد على الترتيب. المعاملة التي تحتوي على سجل بمواضيع [A, B] ستتطابق مع مرشحات المواضيع التالية:
[]"أي شيء"[A]"A في الموضع الأول (وأي شيء بعده)"[null, B]"أي شيء في الموضع الأول و B في الموضع الثاني (وأي شيء بعده)"[A, B]"A في الموضع الأول و B في الموضع الثاني (وأي شيء بعده)"[[A, B], [A, B]]"(A أو B) في الموضع الأول و (A أو B) في الموضع الثاني (وأي شيء بعده)"- المعلمات
Object- خيارات المرشح:
fromBlock:QUANTITY|TAG- (اختياري، الافتراضي:"latest") عدد صحيح لرقم البلوك، أو"latest"لآخر بلوك مقترح،"safe"لأحدث بلوك آمن،"finalized"لأحدث بلوك نهائي، أو"pending"،"earliest"للمعاملات التي لم تدرج في بلوك بعد.toBlock:QUANTITY|TAG- (اختياري، الافتراضي:"latest") عدد صحيح لرقم البلوك، أو"latest"لآخر بلوك مقترح،"safe"لأحدث بلوك آمن،"finalized"لأحدث بلوك نهائي، أو"pending"،"earliest"للمعاملات التي لم تدرج في بلوك بعد.address:DATA|Array، 20 بايت - (اختياري) عنوان العقد أو قائمة بالعناوين التي يجب أن تصدر منها السجلات.topics:Array of DATA، - (اختياري) مصفوفة من مواضيعDATAبحجم 32 بايت. المواضيع تعتمد على الترتيب. يمكن أن يكون كل موضوع أيضًا مصفوفة من DATA مع خيارات "أو".
1params: [2 {3 fromBlock: "0x1",4 toBlock: "0x2",5 address: "0x8888f1f195afa192cfee860698584c030f4c9db1",6 topics: [7 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",8 null,9 [10 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",11 "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",12 ],13 ],14 },15]إظهار الكلالمرتجعات
QUANTITY - مُعرّف المرشح.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_newBlockFilter
ينشئ مرشحًا في العقدة، للإشعار عند وصول بلوك جديد. للتحقق مما إذا كانت الحالة قد تغيرت، استدعِ eth_getFilterChanges.
المعلمات لا يوجد
المرتجعات
QUANTITY - مُعرّف المرشح.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_newPendingTransactionFilter
ينشئ مرشحًا في العقدة، للإشعار عند وصول معاملات معلقة جديدة. للتحقق مما إذا كانت الحالة قد تغيرت، استدعِ eth_getFilterChanges.
المعلمات لا يوجد
المرتجعات
QUANTITY - مُعرّف المرشح.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_uninstallFilter
يلغي تثبيت مرشح بالمعرّف المحدد. يجب استدعاؤه دائمًا عندما لا تعد هناك حاجة للمراقبة. بالإضافة إلى ذلك، تنتهي مهلة المرشحات عندما لا يتم طلبها باستخدام eth_getFilterChanges لفترة من الوقت.
المعلمات
QUANTITY- مُعرّف المرشح.
1params: [2 "0xb", // 11 // 113]المرتجعات
Boolean - true إذا تم إلغاء تثبيت المرشح بنجاح، وإلا false.
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}eth_getFilterChanges
طريقة استطلاع لمرشح، والتي تُرجع مصفوفة من السجلات التي حدثت منذ آخر استطلاع.
المعلمات
QUANTITY- مُعرّف المرشح.
1params: [2 "0x16", // 22 // 223]المرتجعات
Array - مصفوفة من كائنات السجل، أو مصفوفة فارغة إذا لم يتغير شيء منذ آخر استطلاع.
-
بالنسبة للمرشحات المنشأة باستخدام
eth_newBlockFilter، تكون المرتجعات عبارة عن تجزئات كتل (DATA، 32 بايت)، على سبيل المثال،["0x3454645634534..."]. -
بالنسبة للمرشحات المنشأة باستخدام
eth_newPendingTransactionFilter، تكون المرتجعات عبارة عن تجزئات معاملات (DATA، 32 بايت)، على سبيل المثال،["0x6345343454645..."]. -
بالنسبة للمرشحات المنشأة باستخدام
eth_newFilter، تكون السجلات عبارة عن كائنات بالمعلمات التالية:removed:TAG-trueعند إزالة السجل، بسبب إعادة تنظيم السلسلة.falseإذا كان سجلاً صالحًا.logIndex:QUANTITY- عدد صحيح لموضع فهرس السجل في البلوك.nullعندما يكون سجلاً معلقًا.transactionIndex:QUANTITY- عدد صحيح لموضع فهرس المعاملات الذي تم إنشاء السجل منه.nullعندما يكون سجلاً معلقًا.transactionHash:DATA، 32 بايت - التجزئة (هاش) للمعاملات التي تم إنشاء هذا السجل منها.nullعندما يكون سجلاً معلقًا.blockHash:DATA، 32 بايت - التجزئة (هاش) للبلوك الذي كان فيه هذا السجل.nullعندما يكون معلقًا.nullعندما يكون سجلاً معلقًا.blockNumber:QUANTITY- رقم البلوك الذي كان فيه هذا السجل.nullعندما يكون معلقًا.nullعندما يكون سجلاً معلقًا.address:DATA، 20 بايت - العنوان الذي صدر منه هذا السجل.data:DATA- بيانات سجل غير مفهرسة متغيرة الطول. (في Solidity: صفر أو أكثر من وسيطات السجل غير المفهرسة بحجم 32 بايت.)topics:Array of DATA- مصفوفة من 0 إلى 4DATAبحجم 32 بايت لوسيطات السجل المفهرسة. (في Solidity: الموضوع الأول هو التجزئة (هاش) لتوقيع الحدث (على سبيل المثال،Deposit(address,bytes32,uint256))، إلا إذا قمت بتعريف الحدث باستخدام المحددanonymous.)
-
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result // النتيجة4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 1 // 19 "blockNumber":"0x1b4", // 436 // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 0 // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}إظهار الكلeth_getFilterLogs
يُرجع مصفوفة بجميع السجلات المطابقة للمرشح بالمعرّف المحدد.
المعلمات
QUANTITY- مُعرّف المرشح.
1params: [2 "0x16", // 22 // 223]المرتجعات راجع eth_getFilterChanges
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'النتيجة راجع eth_getFilterChanges
eth_getLogs
يُرجع مصفوفة بجميع السجلات المطابقة لكائن مرشح محدد.
المعلمات
Object- خيارات المرشح:
fromBlock:QUANTITY|TAG- (اختياري، الافتراضي:"latest") عدد صحيح لرقم البلوك، أو"latest"لآخر بلوك مقترح،"safe"لأحدث بلوك آمن،"finalized"لأحدث بلوك نهائي، أو"pending"،"earliest"للمعاملات التي لم تدرج في بلوك بعد.toBlock:QUANTITY|TAG- (اختياري، الافتراضي:"latest") عدد صحيح لرقم البلوك، أو"latest"لآخر بلوك مقترح،"safe"لأحدث بلوك آمن،"finalized"لأحدث بلوك نهائي، أو"pending"،"earliest"للمعاملات التي لم تدرج في بلوك بعد.address:DATA|Array، 20 بايت - (اختياري) عنوان العقد أو قائمة بالعناوين التي يجب أن تصدر منها السجلات.topics:Array of DATA، - (اختياري) مصفوفة من مواضيعDATAبحجم 32 بايت. المواضيع تعتمد على الترتيب. يمكن أن يكون كل موضوع أيضًا مصفوفة من DATA مع خيارات "أو".blockHash:DATA، 32 بايت - (اختياري، مستقبلي) مع إضافة EIP-234، سيكونblockHashخيار مرشح جديدًا يقيد السجلات المرجعة بالبلوك الفردي الذي يحتوي على التجزئة (هاش)blockHashبحجم 32 بايت. استخدامblockHashيعادلfromBlock=toBlock= رقم البلوك الذي يحتوي على التجزئة (هاش)blockHash. إذا كانblockHashموجودًا في معايير المرشح، فلن يُسمح باستخدامfromBlockولاtoBlock.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]المرتجعات راجع eth_getFilterChanges
مثال
1// Request // الطلب2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'النتيجة راجع eth_getFilterChanges
مثال على الاستخدام
نشر عقد باستخدام JSON_RPC
يتضمن هذا القسم عرضًا توضيحيًا لكيفية نشر عقد باستخدام واجهة RPC فقط. هناك طرق بديلة لنشر العقود حيث يتم تجريد هذا التعقيد — على سبيل المثال، باستخدام المكتبات المبنية فوق واجهة RPC مثل web3.js (opens in a new tab) و web3.py (opens in a new tab). هذه التجريدات بشكل عام أسهل في الفهم وأقل عرضة للخطأ، ولكن لا يزال من المفيد فهم ما يحدث خلف الكواليس.
فيما يلي عقد ذكي بسيط يسمى Multiply7 سيتم نشره باستخدام واجهة JSON-RPC إلى عقدة إيثريوم. يفترض هذا البرنامج التعليمي أن القارئ يقوم بالفعل بتشغيل عقدة Geth. يتوفر المزيد من المعلومات حول العقد والعملاء هنا. يُرجى الرجوع إلى وثائق كل عميل على حدة لمعرفة كيفية بدء HTTP JSON-RPC للعملاء غير Geth. يعمل معظم العملاء افتراضيًا على localhost:8545.
1contract Multiply7 {2 event Print(uint);3 function multiply(uint input) returns (uint) {4 Print(input * 7);5 return input * 7;6 }7}أول شيء يجب القيام به هو التأكد من تمكين واجهة HTTP RPC. هذا يعني أننا نزود Geth بعلامة --http عند بدء التشغيل. في هذا المثال، نستخدم عقدة Geth على سلسلة تطوير خاصة. باستخدام هذا النهج، لا نحتاج إلى الإيثر (ether) على الشبكة الحقيقية.
geth --http --dev console 2>>geth.logسيؤدي هذا إلى بدء واجهة HTTP RPC على http://localhost:8545.
يمكننا التحقق من أن الواجهة قيد التشغيل عن طريق استرداد عنوان coinbase (عن طريق الحصول على العنوان الأول من مصفوفة الحسابات) والرصيد باستخدام curl (opens in a new tab). يُرجى ملاحظة أن البيانات في هذه الأمثلة ستختلف على عقدتك المحلية. إذا كنت ترغب في تجربة هذه الأوامر، فاستبدل معلمات الطلب في طلب curl الثاني بالنتيجة التي تم إرجاعها من الطلب الأول.
curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]}curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}نظرًا لأن الأرقام مشفرة بالنظام السداسي عشري (hex)، يتم إرجاع الرصيد بوحدة wei كسلسلة سداسية عشرية. إذا أردنا الحصول على الرصيد بوحدة الإيثر (ether) كرقم، يمكننا استخدام web3 من وحدة تحكم Geth.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410" // "410"الآن بعد أن أصبح هناك بعض الإيثر على سلسلة التطوير الخاصة بنا، يمكننا نشر العقد. الخطوة الأولى هي تجميع عقد Multiply7 إلى كود بايت (byte code) يمكن إرساله إلى آلة إيثريوم الافتراضية (EVM). لتثبيت solc، مترجم Solidity، اتبع وثائق Solidity (opens in a new tab). (قد ترغب في استخدام إصدار solc أقدم ليتطابق مع إصدار المترجم المستخدم في مثالنا (opens in a new tab)).
الخطوة التالية هي تجميع عقد Multiply7 إلى كود بايت يمكن إرساله إلى آلة إيثريوم الافتراضية (EVM).
echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin======= <stdin>:Multiply7 =======Binary:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029الآن بعد أن أصبح لدينا الكود المجمع، نحتاج إلى تحديد مقدار الغاز الذي سيكلفه نشره. تحتوي واجهة RPC على طريقة eth_estimateGas التي ستعطينا تقديرًا.
curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":5,"result":"0x1c31e"}وأخيرًا نشر العقد.
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"}يتم قبول المعاملة بواسطة العقدة ويتم إرجاع التجزئة (هاش) للمعاملة. يمكن استخدام هذه التجزئة لتتبع المعاملة. الخطوة التالية هي تحديد العنوان الذي تم نشر عقدنا فيه. ستنشئ كل معاملة منفذة إيصالًا. يحتوي هذا الإيصال على معلومات مختلفة حول المعاملة مثل أي بلوك تم تضمين المعاملة فيه ومقدار الغاز الذي استخدمته آلة إيثريوم الافتراضية (EVM). إذا أنشأت المعاملة عقدًا، فستحتوي أيضًا على عنوان العقد. يمكننا استرداد الإيصال باستخدام طريقة RPC eth_getTransactionReceipt.
curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}تم إنشاء عقدنا على 0x4d03d617d700cf81935d7f797f4e2ae719648262. النتيجة الفارغة (null) بدلاً من الإيصال تعني أن المعاملة لم يتم تضمينها في بلوك بعد. انتظر لحظة وتحقق مما إذا كان عميل الإجماع الخاص بك قيد التشغيل وحاول مرة أخرى.
التفاعل مع العقود الذكية
في هذا المثال، سنقوم بإرسال معاملة باستخدام eth_sendTransaction إلى طريقة multiply الخاصة بالعقد.
تتطلب eth_sendTransaction عدة وسيطات، وتحديدًا from و to و data. From هو العنوان العام لحسابنا، و to هو عنوان العقد. تحتوي وسيطة data على حمولة تحدد الطريقة التي يجب استدعاؤها وبأي وسيطات. هنا يأتي دور ABI (واجهة التطبيق الثنائية) (opens in a new tab). إن ABI هو ملف JSON يحدد كيفية تعريف وتشفير البيانات لآلة إيثريوم الافتراضية (EVM).
تحدد بايتات الحمولة الطريقة التي يتم استدعاؤها في العقد. هذه هي أول 4 بايتات من التجزئة (هاش) Keccak لاسم الدالة وأنواع وسيطاتها، مشفرة بالنظام السداسي عشري. تقبل دالة multiply نوع uint وهو اسم مستعار لـ uint256. هذا يتركنا مع:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1" // "0xc6888fa1"الخطوة التالية هي تشفير الوسيطات. يوجد uint256 واحد فقط، لنقل، القيمة 6. يحتوي ABI على قسم يحدد كيفية تشفير أنواع uint256.
int<M>: enc(X) هو تشفير المكمل الثنائي (two’s complement) ذو النهاية الكبرى (big-endian) لـ X، مبطنًا على الجانب ذي الترتيب الأعلى (الأيسر) بـ 0xff لـ X السالبة وببايتات صفرية لـ X الموجبة بحيث يكون الطول من مضاعفات 32 بايت.
يتم تشفير هذا إلى 0000000000000000000000000000000000000000000000000000000000000006.
من خلال الجمع بين محدد الدالة والوسيطة المشفرة، ستكون بياناتنا 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.
يمكن الآن إرسال هذا إلى العقدة:
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}نظرًا لأنه تم إرسال معاملة، تم إرجاع التجزئة (هاش) للمعاملة. استرداد الإيصال يعطي:
1{2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",3 blockNumber: 268,4 contractAddress: null,5 cumulativeGasUsed: 22631,6 gasUsed: 22631,7 logs: [{8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",10 blockNumber: 268,11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",12 logIndex: 0,13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",15 transactionIndex: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}إظهار الكليحتوي الإيصال على سجل (log). تم إنشاء هذا السجل بواسطة آلة إيثريوم الافتراضية (EVM) عند تنفيذ المعاملة وتم تضمينه في الإيصال. تُظهر دالة multiply أنه تم إطلاق حدث Print مع المدخلات مضروبة في 7. نظرًا لأن وسيطة حدث Print كانت uint256، يمكننا فك تشفيرها وفقًا لقواعد ABI مما سيتركنا مع الرقم العشري المتوقع 42. بصرف النظر عن البيانات، تجدر الإشارة إلى أنه يمكن استخدام المواضيع (topics) لتحديد الحدث الذي أنشأ السجل:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" // "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"كانت هذه مجرد مقدمة موجزة لبعض المهام الأكثر شيوعًا، والتي توضح الاستخدام المباشر لـ JSON-RPC.