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

⁦JSON-RPC API⁩

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

لهذا الغرض، ينفذ كل عميل إيثيريوم مواصفات JSON-RPC (opens in a new tab)، بحيث تكون هناك مجموعة موحدة من الطرق التي يمكن للتطبيقات الاعتماد عليها بغض النظر عن العقدة المحددة أو تنفيذ العميل.

JSON-RPC (opens in a new tab) هو بروتوكول استدعاء الإجراء عن بُعد (RPC) خفيف الوزن وعديم الحالة. يحدد العديد من هياكل البيانات والقواعد المتعلقة بمعالجتها. وهو مستقل عن وسيلة النقل، حيث يمكن استخدام المفاهيم داخل نفس العملية، أو عبر مآخذ التوصيل، أو عبر HTTP، أو في العديد من بيئات تمرير الرسائل المختلفة. يستخدم JSON (RFC 4627) كتنسيق للبيانات.

تنفيذات العميل

قد يستخدم كل من عملاء إيثيريوم لغات برمجة مختلفة عند تنفيذ مواصفات JSON-RPC. راجع وثائق كل عميل لمزيد من التفاصيل المتعلقة بلغات برمجة محددة. نوصي بالتحقق من وثائق كل عميل للحصول على أحدث معلومات دعم API.

مكتبات التسهيل

على الرغم من أنه يمكنك اختيار التفاعل مباشرة مع عملاء إيثيريوم عبر JSON-RPC API، إلا أن هناك غالباً خيارات أسهل لمطوري التطبيقات اللامركزية (dapp). توجد العديد من مكتبات JavaScript وAPI للواجهة الخلفية لتوفير واجهات تغليف أعلى JSON-RPC API. باستخدام هذه المكتبات، يمكن للمطورين كتابة دوال بديهية من سطر واحد بلغة البرمجة التي يختارونها لتهيئة طلبات JSON-RPC (داخلياً) والتي تتفاعل مع إيثيريوم.

واجهات API لعميل الإجماع

تتناول هذه الصفحة بشكل أساسي واجهة API الخاصة بـ JSON-RPC التي يستخدمها عملاء التنفيذ في إيثيريوم. ومع ذلك، يمتلك عملاء الإجماع أيضًا واجهة RPC API تتيح للمستخدمين الاستعلام عن معلومات حول العقدة، وطلب كتل Beacon، وحالة Beacon، وغيرها من المعلومات المتعلقة بالإجماع مباشرة من العقدة. تم توثيق واجهة API هذه في صفحة الويب الخاصة بواجهة Beacon API (opens in a new tab).

تُستخدم أيضًا واجهة API داخلية للتواصل بين العملاء داخل العقدة - أي أنها تمكن عميل الإجماع وعميل التنفيذ من مبادلة البيانات. يُطلق على هذا اسم 'Engine API' والمواصفات متاحة على GitHub (opens in a new tab).

مواصفات عميل التنفيذ

اقرأ مواصفات JSON-RPC API الكاملة على GitHub (opens in a new tab). تم توثيق API هذه في صفحة ويب API التنفيذ (opens in a new tab) وتتضمن أداة فحص لتجربة جميع الطرق المتاحة.

الاصطلاحات

ترميز القيم السداسية العشرية

يتم تمرير نوعين رئيسيين من البيانات عبر JSON: مصفوفات البايت غير المنسقة والكميات. يتم تمرير كلاهما بترميز سداسي عشري ولكن بمتطلبات تنسيق مختلفة.

الكميات

عند ترميز الكميات (الأعداد الصحيحة، الأرقام): يتم ترميزها بالنظام السداسي العشري، وتُسبق بـ "0x"، بأكثر تمثيل مضغوط (استثناء بسيط: يجب تمثيل الصفر كـ "0x0").

إليك بعض الأمثلة:

  • 0x41 (65 بالنظام العشري)
  • 0x400 (1024 بالنظام العشري)
  • خطأ: 0x (يجب أن يحتوي دائمًا على رقم واحد على الأقل - الصفر هو "0x0")
  • خطأ: 0x0400 (لا يُسمح بالأصفار البادئة)
  • خطأ: ff (يجب أن يُسبق بـ 0x)

البيانات غير المنسقة

عند ترميز البيانات غير المنسقة (مصفوفات البايت، عناوين الحسابات، التجزئات، مصفوفات رمز البايت): يتم ترميزها بالنظام السداسي العشري، وتُسبق بـ "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 API الفردية باستخدام أداة سطر الأوامر، curl (opens in a new tab). توجد أمثلة نقاط النهاية الفردية هذه أدناه في قسم أمثلة Curl. وفي أسفل الصفحة، نقدم أيضًا مثالًا شاملاً لتصريف ونشر عقد ذكي باستخدام عقدة جو إيثريوم (Geth)، وJSON_RPC API وcurl.

أمثلة Curl

فيما يلي أمثلة على استخدام JSON_RPC API من خلال إجراء طلبات 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 الكامل الذي يتضمن هذه البيانات الإضافية الشكل التالي:

curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545

التناقل، الحالة، والتاريخ

تتطلب مجموعة من طرق JSON-RPC الأساسية بيانات من شبكة إيثيريوم، وتندرج بدقة تحت ثلاث فئات رئيسية: التناقل، الحالة، والتاريخ. استخدم الروابط في هذه الأقسام للانتقال إلى كل طريقة، أو استخدم جدول المحتويات لاستكشاف القائمة الكاملة للطرق.

طرق التناقل

تتتبع هذه الطرق رأس السلسلة. هذه هي الطريقة التي تشق بها المعاملات طريقها عبر الشبكة، وتجد طريقها إلى الكتل، وكيف يكتشف العملاء الكتل الجديدة.

طرق الحالة

الطرق التي تبلغ عن الحالة الحالية لجميع البيانات المخزنة. تشبه "الحالة" قطعة كبيرة مشتركة من ذاكرة الوصول العشوائي (RAM)، وتتضمن أرصدة الحسابات، وبيانات العقود، وتقديرات الغاز.

طرق التاريخ

تجلب السجلات التاريخية لكل كتلة رجوعاً إلى التكوين. يشبه هذا ملفاً كبيراً للإلحاق فقط، ويتضمن جميع رؤوس الكتل، وأجسام الكتل، والكتل العمّة، وإيصالات المعاملات.

ساحة تجربة JSON-RPC API

يمكنك استخدام أداة ساحة التجربة (opens in a new tab) لاكتشاف وتجربة طرق API. كما توضح لك الطرق والشبكات التي يدعمها مختلف مزودي العقد.

طرق JSON-RPC API

web3_clientVersion

يُرجع إصدار العميل الحالي.

المعلمات

لا يوجد

المرتجعات

String - إصدار العميل الحالي

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'
// نتيجة
{
  "id":67,
  "jsonrpc":"2.0",
  "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"
}

web3_sha3

يُرجع Keccak-256 (وليس SHA3-256 القياسي) للبيانات المحددة.

المعلمات

  1. DATA - البيانات المراد تحويلها إلى تجزئة SHA3
params: ["0x68656c6c6f20776f726c64"]

المرتجعات

DATA - نتيجة SHA3 للسلسلة المحددة.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
// نتيجة
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
}

net_version

يعيد معرف الشبكة الحالي.

المعلمات

لا يوجد

المرتجعات

String - معرف الشبكة الحالي.

القائمة الكاملة لمعرفات الشبكة الحالية متاحة على chainlist.org (opens in a new tab). بعض المعرفات الشائعة هي:

  • 1: شبكة إيثيريوم الرئيسية
  • 11155111: شبكة اختبار Sepolia
  • 560048: شبكة اختبار Hoodi

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
// نتيجة
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "3"
}

net_listening

يُرجع true إذا كان العميل يستمع بنشاط لاتصالات الشبكة.

المعلمات

لا يوجد

المرتجعات

Boolean - true عند الاستماع، وإلا false.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
// نتيجة
{
  "id":67,
  "jsonrpc":"2.0",
  "result":true
}

net_peerCount

يُرجع عدد الأقران المتصلين حاليًا بالعميل.

المعلمات

لا يوجد

المرتجعات

QUANTITY - عدد صحيح يمثل عدد الأقران المتصلين.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
// نتيجة
{
  "id":74,
  "jsonrpc": "2.0",
  "result": "0x2" // 2
}

eth_protocolVersion

يعيد إصدار بروتوكول إيثيريوم الحالي. لاحظ أن هذه الطريقة غير متوفرة في جو إيثريوم (Geth) (opens in a new tab).

المعلمات

لا يوجد

المرتجعات

String - إصدار بروتوكول إيثيريوم الحالي

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
// نتيجة
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "54"
}

eth_syncing

يُرجع كائنًا يحتوي على بيانات حول حالة المزامنة أو false.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

لا يوجد

القيم المرجعة

تختلف بيانات الإرجاع الدقيقة بين تطبيقات العميل. يُرجع جميع العملاء False عندما لا تقوم العقدة بالمزامنة، ويُرجع جميع العملاء الحقول التالية.

Object|Boolean، كائن يحتوي على بيانات حالة المزامنة أو FALSE، عند عدم المزامنة:

  • startingBlock: QUANTITY - الكتلة التي بدأ عندها الاستيراد (سيتم إعادة تعيينها فقط بعد أن تصل المزامنة إلى رأسها)
  • currentBlock: QUANTITY - الكتلة الحالية، تمامًا مثل eth_blockNumber
  • highestBlock: QUANTITY - أعلى كتلة مُقدرة

ومع ذلك، قد يوفر العملاء الفرديون أيضًا بيانات إضافية. على سبيل المثال، يُرجع Geth ما يلي:

بينما يُرجع بيسو (Besu):

راجع الوثائق الخاصة بعميلك لمزيد من التفاصيل.

مثال

eth_coinbase

يُرجع عنوان كوين بيس الخاص بالعميل.

جرب نقطة النهاية في بيئة اللعب (opens in a new tab)

ملاحظة: تم إيقاف هذه الطريقة اعتبارًا من v1.14.0 ولم تعد مدعومة. ستؤدي محاولة استخدام هذه الطريقة إلى ظهور خطأ "Method not supported".

المعلمات

لا يوجد

المرتجعات

DATA، 20 بايت - عنوان كوين بيس الحالي.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'
// نتيجة
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
}

eth_chainId

يُرجع معرف السلسلة المستخدم في توقيع المعاملات المحمية من إعادة الإرسال.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

لا يوجد

القيم المرجعة

chainId، قيمة سداسية عشرية في شكل سلسلة نصية تمثل العدد الصحيح لمعرف السلسلة الحالي.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'
// نتيجة
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "0x1"
}

eth_mining

يُرجع true إذا كان العميل يقوم بتعدين كتل جديدة بنشاط. يمكن أن يُرجع هذا true فقط لشبكات إثبات العمل (PoW) وقد لا يكون متاحًا في بعض العملاء منذ الدمج.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

لا يوجد

المرتجعات

Boolean - يُرجع true إذا كان العميل يقوم بالتعدين، وإلا false.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'
//
{
  "id":71,
  "jsonrpc": "2.0",
  "result": true
}

eth_hashrate

يُرجع عدد التجزئات في الثانية التي تقوم العقدة بالتعدين بها. يمكن أن يُرجع هذا فقط true لشبكات إثبات العمل (PoW) وقد لا يكون متاحًا في بعض العملاء منذ الدمج.

تجربة نقطة النهاية في بيئة اللعب (opens in a new tab)

المعلمات

لا يوجد

القيم المرجعة

QUANTITY - عدد التجزئات في الثانية.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'
// نتيجة
{
  "id":71,
  "jsonrpc": "2.0",
  "result": "0x38a"
}

eth_gasPrice

يعيد تقديراً للسعر الحالي لكل غاز بوحدة Wei. على سبيل المثال، يفحص عميل بيسو آخر 100 كتلة ويعيد وسيط سعر وحدة الغاز افتراضيًا.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

لا يوجد

المرتجعات

QUANTITY - عدد صحيح يمثل سعر الغاز الحالي بوحدة Wei.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'
// نتيجة
{
  "id":73,
  "jsonrpc": "2.0",
  "result": "0x1dfd14000" // 8049999872 Wei
}

eth_accounts

يعيد قائمة بالعناوين المملوكة للعميل.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

لا يوجد

القيم المعادة

Array of DATA، 20 Bytes - العناوين المملوكة للعميل.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}

eth_blockNumber

يُرجع رقم أحدث كتلة.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

لا يوجد

المرتجعات

QUANTITY - عدد صحيح لرقم الكتلة الحالية التي يوجد عليها العميل.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'
// نتيجة
{
  "id":83,
  "jsonrpc": "2.0",
  "result": "0x4b7" // 1207
}

eth_getBalance

يعيد رصيد الحساب في عنوان معين.

جرب نقطة النهاية في بيئة اللعب (opens in a new tab)

المعلمات

  1. DATA، 20 Bytes - العنوان المراد التحقق من رصيده.
  2. QUANTITY|TAG - رقم كتلة صحيح، أو السلسلة "latest"، أو "earliest"، أو "pending"، أو "safe"، أو "finalized"، راجع معلمة الكتلة
params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]

القيم المعادة

QUANTITY - عدد صحيح يمثل الرصيد الحالي بوحدة Wei.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x0234c8a3397aab58" // 158972490234375000
}

eth_getStorageAt

يُرجع القيمة من موضع تخزين في عنوان محدد.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. DATA، 20 Bytes - عنوان التخزين.
  2. QUANTITY - عدد صحيح لموضع التخزين.
  3. QUANTITY|TAG - عدد صحيح لرقم الكتلة، أو السلسلة "latest"، أو "earliest"، أو "pending"، أو "safe"، أو "finalized"، راجع معلمة الكتلة

القيم المرجعة

DATA - القيمة في موضع التخزين هذا.

مثال يعتمد حساب الموضع الصحيح على التخزين المراد استرداده. ضع في اعتبارك العقد التالي المنشور في 0x295a70b2de5e3953354a6a8344e616ed314d7251 بواسطة العنوان 0x391694e7e0b0cce554cb130d723a9d27458f9298.

contract Storage {
    uint pos0;
    mapping(address => uint) pos1;
    constructor() {
        pos0 = 1234;
        pos1[msg.sender] = 5678;
    }
}

استرداد قيمة pos0 أمر مباشر:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}

استرداد عنصر من الخريطة أصعب. يتم حساب موضع عنصر في الخريطة باستخدام:

keccak(LeftPad32(key, 0), LeftPad32(map position, 0))

هذا يعني أنه لاسترداد التخزين في pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] نحتاج إلى حساب الموضع باستخدام:

keccak(
  decodeHex(
    "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +
      "0000000000000000000000000000000000000000000000000000000000000001"
  )
)

يمكن استخدام وحدة تحكم جو إيثريوم (geth) التي تأتي مع مكتبة Web3 لإجراء الحساب:

> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3.sha3(key, {"encoding": "hex"})
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"

الآن لجلب التخزين:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}

eth_getTransactionCount

يعيد عدد المعاملات المرسلة من عنوان.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. DATA، 20 Bytes - عنوان.
  2. QUANTITY|TAG - رقم كتلة صحيح، أو السلسلة "latest"، أو "earliest"، أو "pending"، أو "safe" أو "finalized"، راجع معلمة الكتلة
params: [
  "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
  "latest", // حالة عند أحدث كتلة
]

القيم المعادة

QUANTITY - عدد صحيح يمثل عدد المعاملات المرسلة من هذا العنوان.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}

eth_getBlockTransactionCountByHash

يُرجع عدد المعاملات في كتلة من كتلة تطابق تجزئة الكتلة المحددة.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. DATA، 32 Bytes - تجزئة كتلة
params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]

المرتجعات

QUANTITY - عدد صحيح يمثل عدد المعاملات في هذه الكتلة.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x8b" // 139
}

eth_getBlockTransactionCountByNumber

يُرجع عدد المعاملات في كتلة تطابق رقم الكتلة المحدد.

جرب نقطة النهاية في بيئة اللعب (opens in a new tab)

المعلمات

  1. QUANTITY|TAG - عدد صحيح لرقم كتلة، أو السلسلة النصية "earliest"، أو "latest"، أو "pending"، أو "safe"، أو "finalized"، كما هو الحال في معلمة الكتلة.
params: [
  "0x13738ca", // 20396234
]

القيم المرجعة

QUANTITY - عدد صحيح يمثل عدد المعاملات في هذه الكتلة.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x8b" // 139
}

eth_getUncleCountByBlockHash

يُرجع عدد الأعمام في كتلة من كتلة تطابق تجزئة الكتلة المحددة.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

  1. DATA، 32 Bytes - تجزئة كتلة
params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]

المرتجعات

QUANTITY - عدد صحيح يمثل عدد الأعمام في هذه الكتلة.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}

eth_getUncleCountByBlockNumber

يُرجع عدد الأعمام في كتلة من كتلة تطابق رقم الكتلة المحدد.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. QUANTITY|TAG - عدد صحيح لرقم كتلة، أو السلسلة "latest"، أو "earliest"، أو "pending"، أو "safe"، أو "finalized"، راجع معلمة الكتلة
params: [
  "0xe8", // 232
]

المرتجعات

QUANTITY - عدد صحيح لعدد الأعمام في هذه الكتلة.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x0" // 0
}

eth_getCode

يعيد الرمز الموجود في عنوان معين.

جرب نقطة النهاية في بيئة اللعب (opens in a new tab)

المعلمات

  1. DATA، 20 Bytes - العنوان
  2. QUANTITY|TAG - رقم كتلة صحيح، أو السلسلة النصية "latest"، أو "earliest"، أو "pending"، أو "safe" أو "finalized"، راجع معلمة الكتلة
params: [
  "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
  "0x5daf3b", // 6139707
]

المرتجعات

DATA - الرمز من العنوان المحدد.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"
}

eth_sign

تحسب طريقة sign توقيعًا خاصًا بشبكة إيثيريوم باستخدام: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).

تؤدي إضافة بادئة إلى الرسالة إلى جعل التوقيع المحسوب مميزًا كتوقيع خاص بشبكة إيثيريوم. يمنع هذا سوء الاستخدام حيث يمكن لتطبيق لامركزي (dapp) ضار توقيع بيانات عشوائية (مثل معاملة) واستخدام التوقيع لانتحال شخصية الضحية.

ملاحظة: يجب أن يكون العنوان المراد التوقيع به غير مقفل.

المعلمات

  1. DATA، 20 Bytes - العنوان
  2. DATA، N Bytes - الرسالة المراد توقيعها

المرتجعات

DATA: التوقيع

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

eth_signTransaction

يوقع معاملة يمكن إرسالها إلى الشبكة في وقت لاحق باستخدام eth_sendRawTransaction.

المعلمات

  1. Object - كائن المعاملة
  • type:
  • from: DATA، 20 Bytes - العنوان الذي تُرسل منه المعاملة.
  • to: DATA، 20 Bytes - (اختياري عند إنشاء عقد جديد) العنوان الذي تُوجه إليه المعاملة.
  • gas: QUANTITY - (اختياري، الافتراضي: 90000) عدد صحيح للغاز المقدم لتنفيذ المعاملة. سيعيد الغاز غير المستخدم.
  • gasPrice: QUANTITY - (اختياري، الافتراضي: To-Be-Determined) عدد صحيح لسعر الغاز المستخدم لكل غاز مدفوع، بوحدة Wei.
  • value: QUANTITY - (اختياري) عدد صحيح للقيمة المرسلة مع هذه المعاملة، بوحدة Wei.
  • data: DATA - الرمز المصرّف لعقد أو تجزئة توقيع الطريقة المستدعاة والمعلمات المشفرة.
  • nonce: QUANTITY - (اختياري) عدد صحيح لرقم فريد. يسمح هذا بالكتابة فوق معاملاتك المعلقة التي تستخدم نفس الرقم الفريد.

المرتجعات

DATA، كائن المعاملة المشفر بـ RLP والموقع من قبل الحساب المحدد.

مثال

// طلب
curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'
// نتيجة
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

eth_sendTransaction

ينشئ معاملة استدعاء رسالة جديدة أو إنشاء عقد، إذا كان حقل البيانات يحتوي على رمز، ويوقعها باستخدام الحساب المحدد في from.

المعلمات

  1. Object - كائن المعاملة
  • from: DATA، 20 Bytes - العنوان الذي تُرسل منه المعاملة.
  • to: DATA، 20 Bytes - (اختياري عند إنشاء عقد جديد) العنوان الذي تُوجه إليه المعاملة.
  • gas: QUANTITY - (اختياري، الافتراضي: 90000) عدد صحيح للغاز المقدم لتنفيذ المعاملة. سيعيد الغاز غير المستخدم.
  • gasPrice: QUANTITY - (اختياري، الافتراضي: يُحدد لاحقًا) عدد صحيح يمثل سعر الغاز (gasPrice) المستخدم لكل غاز مدفوع.
  • value: QUANTITY - (اختياري) عدد صحيح للقيمة المرسلة مع هذه المعاملة.
  • input: DATA - الرمز المُصرف لعقد أو تجزئة توقيع الطريقة المستدعاة والمعلمات المشفرة.
  • nonce: QUANTITY - (اختياري) عدد صحيح يمثل رقمًا فريدًا (nonce). يتيح لك هذا الكتابة فوق معاملاتك المعلقة التي تستخدم نفس الرقم الفريد.

القيم المعادة

DATA، 32 Bytes - تجزئة المعاملة، أو التجزئة الصفرية إذا لم تكن المعاملة متاحة بعد.

استخدم eth_getTransactionReceipt للحصول على عنوان العقد، بعد اقتراح المعاملة في كتلة، عند إنشائك لعقد.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_sendRawTransaction

ينشئ معاملة استدعاء رسالة جديدة أو إنشاء عقد للمعاملات الموقعة.

المعلمات

  1. DATA، بيانات المعاملة الموقعة.
params: [
  "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
]

القيم المرجعة

DATA، 32 Bytes - تجزئة المعاملة، أو التجزئة الصفرية إذا لم تكن المعاملة متاحة بعد.

استخدم eth_getTransactionReceipt للحصول على عنوان العقد، بعد اقتراح المعاملة في كتلة، عندما قمت بإنشاء عقد.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_call

ينفذ استدعاء رسالة جديدًا على الفور دون إنشاء معاملة على سلسلة الكتل. يُستخدم غالبًا لتنفيذ وظائف العقد الذكي للقراءة فقط، على سبيل المثال balanceOf لعقد ERC-20.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. 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).
  1. QUANTITY|TAG - رقم كتلة صحيح، أو السلسلة "latest"، أو "earliest"، أو "pending"، أو "safe" أو "finalized"، راجع معلمة الكتلة

القيم المرجعة

DATA - القيمة المرجعة للعقد المنفذ.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x"
}

eth_estimateGas

يُنشئ ويُرجع تقديرًا لمقدار الغاز اللازم للسماح للمعاملة بالاكتمال. لن تتم إضافة المعاملة إلى سلسلة الكتل. لاحظ أن التقدير قد يكون أكثر بكثير من كمية الغاز التي تستخدمها المعاملة فعليًا، لمجموعة متنوعة من الأسباب بما في ذلك آليات EVM وأداء العقدة.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

راجع معلمات eth_call، باستثناء أن جميع الخصائص اختيارية. إذا لم يتم تحديد حد الغاز، يستخدم جو إيثريوم (geth) حد الغاز للكتلة من الكتلة المعلقة كحد أقصى. ونتيجة لذلك، قد لا يكون التقدير المُرجع كافيًا لتنفيذ الاستدعاء/المعاملة عندما تكون كمية الغاز أعلى من حد الغاز للكتلة المعلقة.

القيم المرجعة

QUANTITY - كمية الغاز المستخدمة.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x5208" // 21000
}

eth_getBlockByHash

يعيد معلومات حول كتلة بناءً على التجزئة.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. DATA، 32 Bytes - تجزئة الكتلة.
  2. Boolean - إذا كان true فإنه يعيد كائنات المعاملة الكاملة، وإذا كان false فإنه يعيد تجزئات المعاملات فقط.
params: [
  "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
  false,
]

القيم المعادة

Object - كائن كتلة، أو null عندما لا يتم العثور على كتلة:

  • number: QUANTITY - رقم الكتلة. null عندما تكون كتلة معلقة.
  • hash: DATA، 32 Bytes - تجزئة الكتلة. null عندما تكون كتلة معلقة.
  • parentHash: DATA، 32 Bytes - تجزئة الكتلة الأصلية.
  • nonce: DATA، 8 Bytes - تجزئة إثبات العمل (PoW) المُنشأ. null عندما تكون كتلة معلقة، 0x0 لكتل إثبات الحصة (PoS) (منذ الدمج)
  • sha3Uncles: DATA، 32 Bytes - تجزئة SHA3 لبيانات الكتل الشقيقة (uncles) في الكتلة.
  • logsBloom: DATA، 256 Bytes - مرشح بلوم (bloom filter) لسجلات الكتلة. null عندما تكون كتلة معلقة.
  • transactionsRoot: DATA، 32 Bytes - جذر شجرة المعاملات للكتلة.
  • stateRoot: DATA، 32 Bytes - جذر شجرة الحالة النهائية للكتلة.
  • receiptsRoot: DATA، 32 Bytes - جذر شجرة الإيصالات للكتلة.
  • miner: DATA، 20 Bytes - عنوان المستفيد الذي مُنحت له مكافآت الكتلة.
  • difficulty: QUANTITY - عدد صحيح يمثل صعوبة هذه الكتلة.
  • totalDifficulty: QUANTITY - عدد صحيح يمثل الصعوبة الإجمالية للسلسلة حتى هذه الكتلة.
  • extraData: DATA - حقل "البيانات الإضافية" لهذه الكتلة.
  • size: QUANTITY - عدد صحيح يمثل حجم هذه الكتلة بالبايت.
  • gasLimit: QUANTITY - الحد الأقصى للغاز المسموح به في هذه الكتلة.
  • gasUsed: QUANTITY - إجمالي الغاز المستخدم بواسطة جميع المعاملات في هذه الكتلة.
  • timestamp: QUANTITY - الطابع الزمني لنظام Unix لوقت تجميع الكتلة.
  • transactions: Array - مصفوفة من كائنات المعاملات، أو تجزئات معاملات بحجم 32 Bytes اعتمادًا على المعلمة الأخيرة المعطاة.
  • uncles: Array - مصفوفة من تجزئات الكتل الشقيقة (uncles).

مثال

eth_getBlockByNumber

يُرجع معلومات حول كتلة بناءً على رقم الكتلة.

جرب نقطة النهاية في بيئة الاختبار (opens in a new tab)

المعلمات

  1. QUANTITY|TAG - عدد صحيح لرقم الكتلة، أو السلسلة النصية "earliest"، أو "latest"، أو "pending"، أو "safe"، أو "finalized"، كما هو موضح في معلمة الكتلة.
  2. Boolean - إذا كانت true فإنها تُرجع كائنات المعاملة الكاملة، وإذا كانت false فإنها تُرجع تجزئات المعاملات فقط.
params: [
  "0x1b4", // 436
  true,
]

القيم المرجعة راجع eth_getBlockByHash

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'

للنتيجة راجع eth_getBlockByHash

eth_getTransactionByHash

يعيد المعلومات حول معاملة مطلوبة بواسطة تجزئة المعاملة.

جرب نقطة النهاية في ساحة التجربة (opens in a new tab)

المعلمات

  1. DATA، 32 Bytes - تجزئة المعاملة
params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]

القيم المعادة

Object - كائن معاملة، أو null عند عدم العثور على معاملة:

  • blockHash: DATA، 32 Bytes - تجزئة الكتلة التي كانت هذه المعاملة فيها. null عندما تكون معلقة.
  • blockNumber: QUANTITY - رقم الكتلة التي كانت هذه المعاملة فيها. null عندما تكون معلقة.
  • from: DATA، 20 Bytes - عنوان المرسل.
  • gas: QUANTITY - الغاز المقدم من المرسل.
  • gasPrice: QUANTITY - سعر الغاز المقدم من المرسل بوحدة Wei.
  • hash: DATA، 32 Bytes - تجزئة المعاملة.
  • input: DATA - البيانات المرسلة مع المعاملة.
  • nonce: QUANTITY - عدد المعاملات التي أجراها المرسل قبل هذه المعاملة.
  • to: DATA، 20 Bytes - عنوان المستلم. null عندما تكون معاملة إنشاء عقد.
  • transactionIndex: QUANTITY - عدد صحيح لموضع مؤشر المعاملة في الكتلة. null عندما تكون معلقة.
  • value: QUANTITY - القيمة المحولة بوحدة Wei.
  • v: QUANTITY - معرف استرداد ECDSA
  • r: QUANTITY - توقيع ECDSA r
  • s: QUANTITY - توقيع ECDSA s

مثال

eth_getTransactionByBlockHashAndIndex

يُرجع معلومات حول معاملة حسب تجزئة الكتلة وموضع مؤشر المعاملة.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

  1. DATA، 32 Bytes - تجزئة الكتلة.
  2. QUANTITY - عدد صحيح لموضع مؤشر المعاملة.
params: [
  "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
  "0x0", // 0
]

المرتجعات انظر eth_getTransactionByHash

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'

للنتيجة انظر eth_getTransactionByHash

eth_getTransactionByBlockNumberAndIndex

يُرجع معلومات حول معاملة بناءً على رقم الكتلة وموضع مؤشر المعاملة.

جرب نقطة النهاية في بيئة اللعب (opens in a new tab)

المعلمات

  1. QUANTITY|TAG - رقم كتلة، أو السلسلة "earliest"، أو "latest"، أو "pending"، أو "safe"، أو "finalized"، كما هو موضح في معلمة الكتلة.
  2. QUANTITY - موضع مؤشر المعاملة.
params: [
  "0x9c47cf", // 10241999
  "0x24", // 36
]

المرتجعات راجع eth_getTransactionByHash

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'

للنتيجة راجع eth_getTransactionByHash

eth_getTransactionReceipt

يعيد إيصال معاملة بواسطة تجزئة المعاملة.

ملاحظة أن الإيصال غير متاح للمعاملات المعلقة.

المعلمات

  1. DATA، 32 Bytes - تجزئة معاملة
params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]

القيم المعادة Object - كائن إيصال معاملة، أو null عند عدم العثور على إيصال:

  • transactionHash : DATA، 32 Bytes - تجزئة المعاملة.
  • transactionIndex: QUANTITY - عدد صحيح يمثل موضع مؤشر المعاملة في الكتلة.
  • blockHash: DATA، 32 Bytes - تجزئة الكتلة التي كانت هذه المعاملة فيها.
  • blockNumber: QUANTITY - رقم الكتلة التي كانت هذه المعاملة فيها.
  • from: DATA، 20 Bytes - عنوان المرسل.
  • to: DATA، 20 Bytes - عنوان المستلم. يكون null عندما تكون معاملة إنشاء عقد.
  • cumulativeGasUsed : QUANTITY - إجمالي كمية الغاز المستخدمة عند تنفيذ هذه المعاملة في الكتلة.
  • effectiveGasPrice : QUANTITY - مجموع الرسم الأساسي والإكرامية المدفوعة لكل وحدة غاز.
  • gasUsed : QUANTITY - كمية الغاز المستخدمة بواسطة هذه المعاملة المحددة وحدها.
  • contractAddress : DATA، 20 Bytes - عنوان العقد الذي تم إنشاؤه، إذا كانت المعاملة عبارة عن إنشاء عقد، وإلا null.
  • logs: Array - مصفوفة من كائنات السجل التي أنشأتها هذه المعاملة.
  • logsBloom: DATA، 256 Bytes - مرشح بلوم للعملاء الخفيفين لاسترداد السجلات ذات الصلة بسرعة.
  • type: QUANTITY - عدد صحيح يمثل نوع المعاملة، 0x0 للمعاملات القديمة، 0x1 لأنواع قوائم الوصول، 0x2 للرسوم الديناميكية.

كما يعيد إما :

  • root : DATA 32 bytes من جذر الحالة بعد المعاملة (قبل بيزنطيوم)
  • status: QUANTITY إما 1 (نجاح) أو 0 (فشل)

مثال

eth_getUncleByBlockHashAndIndex

يُرجع معلومات حول عم لكتلة بناءً على التجزئة وموضع مؤشر العم.

جرب نقطة النهاية في ساحة التجربة (opens in a new tab)

المعلمات

  1. DATA، 32 Bytes - تجزئة الكتلة.
  2. QUANTITY - موضع مؤشر العم.
params: [
  "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
  "0x0", // 0
]

المرتجعات انظر eth_getBlockByHash

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'

للنتيجة انظر eth_getBlockByHash

ملاحظة: لا يحتوي العم على معاملات فردية.

eth_getUncleByBlockNumberAndIndex

يُرجع معلومات حول عم لكتلة بناءً على الرقم وموضع مؤشر العم.

جرب نقطة النهاية في ساحة اللعب (opens in a new tab)

المعلمات

  1. QUANTITY|TAG - رقم كتلة، أو السلسلة "earliest"، أو "latest"، أو "pending"، أو "safe"، أو "finalized"، كما هو الحال في معلمة الكتلة.
  2. QUANTITY - موضع مؤشر العم.
params: [
  "0x29c", // 668
  "0x0", // 0
]

المرتجعات راجع eth_getBlockByHash

ملاحظة: لا يحتوي العم على معاملات فردية.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'

للنتيجة راجع eth_getBlockByHash

eth_newFilter

ينشئ كائن مرشح، بناءً على خيارات الترشيح، للإشعار عند تغير الحالة (السجلات). للتحقق مما إذا كانت الحالة قد تغيرت، استدعِ eth_getFilterChanges.

ملاحظة حول تحديد مرشحات المواضيع: المواضيع تعتمد على الترتيب. المعاملة التي تحتوي على سجل بمواضيع [A, B] ستتطابق مع مرشحات المواضيع التالية:

  • [] "أي شيء"
  • [A] "A في الموضع الأول (وأي شيء بعده)"
  • [null, B] "أي شيء في الموضع الأول و B في الموضع الثاني (وأي شيء بعده)"
  • [A, B] "A في الموضع الأول و B في الموضع الثاني (وأي شيء بعده)"
  • [[A, B], [A, B]] "(A أو B) في الموضع الأول و (A أو B) في الموضع الثاني (وأي شيء بعده)"
  • المعلمات
  1. Object - خيارات المرشح:
  • fromBlock: QUANTITY|TAG - (اختياري، الافتراضي: "latest") رقم كتلة صحيح، أو "latest" لآخر كتلة مقترحة، أو "safe" لأحدث كتلة آمنة، أو "finalized" لأحدث كتلة نهائية، أو "pending"، "earliest" للمعاملات التي لم تُدرج في كتلة بعد.
  • toBlock: QUANTITY|TAG - (اختياري، الافتراضي: "latest") رقم كتلة صحيح، أو "latest" لآخر كتلة مقترحة، أو "safe" لأحدث كتلة آمنة، أو "finalized" لأحدث كتلة نهائية، أو "pending"، "earliest" للمعاملات التي لم تُدرج في كتلة بعد.
  • address: DATA|Array، 20 Bytes - (اختياري) عنوان عقد أو قائمة عناوين يجب أن تصدر منها السجلات.
  • topics: Array of DATA، - (اختياري) مصفوفة من مواضيع DATA بحجم 32 Bytes. المواضيع تعتمد على الترتيب. يمكن أن يكون كل موضوع أيضًا مصفوفة من البيانات مع خيارات "أو" (or).

المرتجعات QUANTITY - معرف المرشح.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}

eth_newBlockFilter

ينشئ مرشحًا في العقدة، للإشعار عند وصول كتلة جديدة. للتحقق مما إذا كانت الحالة قد تغيرت، قم باستدعاء eth_getFilterChanges.

المعلمات لا يوجد

المرتجعات QUANTITY - معرف المرشح.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'
// نتيجة
{
  "id":1,
  "jsonrpc":  "2.0",
  "result": "0x1" // 1
}

eth_newPendingTransactionFilter

ينشئ مرشحًا في العقدة، للإشعار عند وصول معاملات معلقة جديدة. للتحقق مما إذا كانت الحالة قد تغيرت، قم باستدعاء eth_getFilterChanges.

المعلمات لا يوجد

المرتجعات QUANTITY - معرف المرشح.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
// نتيجة
{
  "id":1,
  "jsonrpc":  "2.0",
  "result": "0x1" // 1
}

eth_uninstallFilter

يقوم بإلغاء تثبيت مرشح بمعرف محدد. يجب استدعاؤه دائمًا عندما لا تعود هناك حاجة للمراقبة. بالإضافة إلى ذلك، تنتهي مهلة المرشحات عندما لا يتم طلبها باستخدام eth_getFilterChanges لفترة من الوقت.

المعلمات

  1. QUANTITY - معرف المرشح.
params: [
  "0xb", // 11
]

القيم المرجعة Boolean - true إذا تم إلغاء تثبيت المرشح بنجاح، وإلا false.

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'
// نتيجة
{
  "id":1,
  "jsonrpc": "2.0",
  "result": true
}

eth_getFilterChanges

طريقة استطلاع لمرشح، والتي تُرجع مصفوفة من السجلات التي حدثت منذ آخر استطلاع.

المعلمات

  1. QUANTITY - معرف المرشح.
params: [
  "0x16", // 22
]

القيم المرجعة Array - مصفوفة من كائنات السجل، أو مصفوفة فارغة إذا لم يتغير شيء منذ آخر استطلاع.

  • بالنسبة للمرشحات التي تم إنشاؤها باستخدام eth_newBlockFilter تكون القيم المرجعة عبارة عن تجزئات الكتل (DATA، 32 Bytes)، على سبيل المثال، ["0x3454645634534..."].

  • بالنسبة للمرشحات التي تم إنشاؤها باستخدام eth_newPendingTransactionFilter تكون القيم المرجعة عبارة عن تجزئات المعاملات (DATA، 32 Bytes)، على سبيل المثال، ["0x6345343454645..."].

  • بالنسبة للمرشحات التي تم إنشاؤها باستخدام eth_newFilter تكون السجلات عبارة عن كائنات تحتوي على المعلمات التالية:

    • removed: TAG - true عندما تتم إزالة السجل، بسبب إعادة التنظيم للسلسلة. false إذا كان سجلاً صالحًا.
    • logIndex: QUANTITY - عدد صحيح لموضع مؤشر السجل في الكتلة. null عندما يكون سجلاً معلقًا.
    • transactionIndex: QUANTITY - عدد صحيح لموضع مؤشر المعاملة التي تم إنشاء السجل منها. null عندما يكون سجلاً معلقًا.
    • transactionHash: DATA، 32 Bytes - تجزئة المعاملة التي تم إنشاء هذا السجل منها. null عندما يكون سجلاً معلقًا.
    • blockHash: DATA، 32 Bytes - تجزئة الكتلة التي كان هذا السجل موجودًا فيها. null عندما يكون معلقًا. null عندما يكون سجلاً معلقًا.
    • blockNumber: QUANTITY - رقم الكتلة التي كان هذا السجل موجودًا فيها. null عندما يكون معلقًا. null عندما يكون سجلاً معلقًا.
    • address: DATA، 20 Bytes - العنوان الذي نشأ منه هذا السجل.
    • data: DATA - بيانات سجل غير مفهرسة متغيرة الطول. (في Solidity: صفر أو أكثر من وسيطات السجل غير المفهرسة بحجم 32 Bytes.)
    • topics: Array of DATA - مصفوفة من 0 إلى 4 DATA بحجم 32 Bytes من وسيطات السجل المفهرسة. (في Solidity: الموضوع الأول هو تجزئة توقيع الحدث (على سبيل المثال، Deposit(address,bytes32,uint256))، إلا إذا قمت بتعريف الحدث باستخدام المحدد anonymous.)
  • مثال

eth_getFilterLogs

يعيد مصفوفة بجميع السجلات التي تطابق عامل التصفية بالمعرف المحدد.

المعلمات

  1. QUANTITY - معرف عامل التصفية.
params: [
  "0x16", // 22
]

القيم المعادة راجع eth_getFilterChanges

مثال

// طلب
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'

للنتيجة راجع eth_getFilterChanges

eth_getLogs

يعيد مصفوفة بجميع السجلات التي تطابق كائن تصفية معين.

المعلمات

  1. Object - خيارات التصفية:
  • fromBlock: QUANTITY|TAG - (اختياري، الافتراضي: "latest") رقم الكتلة كعدد صحيح، أو "latest" لآخر كتلة مقترحة، أو "safe" لأحدث كتلة آمنة، أو "finalized" لأحدث كتلة نهائية، أو "pending"، "earliest" للمعاملات التي لم تُدرج في كتلة بعد.
  • toBlock: QUANTITY|TAG - (اختياري، الافتراضي: "latest") رقم الكتلة كعدد صحيح، أو "latest" لآخر كتلة مقترحة، أو "safe" لأحدث كتلة آمنة، أو "finalized" لأحدث كتلة نهائية، أو "pending"، "earliest" للمعاملات التي لم تُدرج في كتلة بعد.
  • address: DATA|Array، 20 Bytes - (اختياري) عنوان العقد أو قائمة بالعناوين التي يجب أن تصدر منها السجلات.
  • topics: Array of DATA، - (اختياري) مصفوفة من مواضيع DATA بحجم 32 Bytes. المواضيع تعتمد على الترتيب. يمكن أن يكون كل موضوع أيضًا مصفوفة من البيانات (DATA) مع خيارات "أو" (or).
  • blockHash: DATA، 32 Bytes - (اختياري، مستقبلي) مع إضافة EIP-234، سيكون blockHash خيار تصفية جديدًا يقصر السجلات المعادة على الكتلة الفردية ذات التجزئة بحجم 32-byte blockHash. استخدام blockHash يعادل fromBlock = toBlock = رقم الكتلة ذات التجزئة blockHash. إذا كان blockHash موجودًا في معايير التصفية، فلن يُسمح باستخدام fromBlock ولا toBlock.
params: [
  {
    topics: [
      "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
    ],
  },
]

القيم المعادة انظر eth_getFilterChanges

مثال

// طلب
curl -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.

contract Multiply7 {
    event Print(uint);
    function multiply(uint input) returns (uint) {
        Print(input * 7);
        return input * 7;
    }
}

أول شيء يجب فعله هو التأكد من تمكين واجهة HTTP RPC. هذا يعني أننا نزود جو إيثريوم (geth) بعلامة --http عند بدء التشغيل. في هذا المثال، نستخدم عقدة جو إيثريوم (geth) على سلسلة تطوير خاصة. باستخدام هذا النهج، لا نحتاج إلى إيثر على الشبكة الحقيقية.

geth --http --dev console 2>>geth.log

سيؤدي هذا إلى بدء واجهة HTTP RPC على http://localhost:8545.

يمكننا التحقق من تشغيل الواجهة عن طريق استرداد عنوان كوين بيس (عن طريق الحصول على العنوان الأول من مصفوفة الحسابات) والرصيد باستخدام 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"}

نظرًا لأن الأرقام مشفرة بالنظام السداسي العشري، يتم إرجاع الرصيد بوحدة Wei كسلسلة سداسية عشرية. إذا أردنا الحصول على الرصيد بوحدة إيثر كرقم، يمكننا استخدام Web3 من وحدة تحكم جو إيثريوم (geth).

web3.fromWei("0x1639e49bba16280000", "ether")
// "410"

الآن بعد أن أصبح هناك بعض الإيثر على سلسلة التطوير الخاصة بنا، يمكننا نشر العقد. الخطوة الأولى هي تصريف عقد Multiply7 إلى رمز البايت الذي يمكن إرساله إلى جهاز إيثيريوم الظاهري (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. هذا يتركنا مع:

web3.sha3("multiply(uint256)").substring(0, 10)
// "0xc6888fa1"

الخطوة التالية هي تشفير الوسائط. يوجد uint256 واحد فقط، لنقل، القيمة 6. تحتوي واجهة التطبيق الثنائية (ABI) على قسم يحدد كيفية تشفير أنواع uint256.

int<M>: enc(X) هو تشفير المتمم الثنائي بنظام النهاية الكبرى لـ 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"}

نظرًا لأنه تم إرسال معاملة، تم إرجاع تجزئة المعاملة. يؤدي استرداد الإيصال إلى إعطاء:

يحتوي الإيصال على سجل. تم إنشاء هذا السجل بواسطة جهاز إيثيريوم الظاهري (EVM) عند تنفيذ المعاملة وتم تضمينه في الإيصال. تُظهر دالة multiply أنه تم إطلاق حدث Print مع المدخلات مضروبة في 7. نظرًا لأن وسيطة حدث Print كانت uint256، يمكننا فك تشفيرها وفقًا لقواعد واجهة التطبيق الثنائية (ABI) مما سيتركنا مع الرقم العشري المتوقع 42. بصرف النظر عن البيانات، تجدر الإشارة إلى أنه يمكن استخدام المواضيع لتحديد الحدث الذي أنشأ السجل:

web3.sha3("Print(uint256)")
// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"

كانت هذه مجرد مقدمة موجزة لبعض المهام الأكثر شيوعًا، والتي توضح الاستخدام المباشر لـ JSON-RPC.