Ethereum: إنشاء طلبات JSON-RPC أولية باستخدام Python للنشر والتعامل مع عقد ذكي

فبراير 2018.

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

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

الملخص : سننشر ونتفاعل (وظائف الاستدعاء وقراءة متغيرات العامة ) مع عقد ذكي على شبكة خاصة باستخدام طلبات HTTP فقط. يتم توقيع المعاملات في وضع عدم الاتصال وبعد ذلك فقط يتم إرسالها إلى عقدة geth للمعالجة.

بالنسبة لهذا الدليل ، أستخدم شبكة خاصة لإثبات السلطة. إذا كنت ترغب في إنشاء مثل هذه الشبكة ، فأنا أدعوك لقراءة رسالتي السابقة. خلاف ذلك ، فإن استخدام Ganache (المعروف سابقًا باسم TestRPC) أو أي شبكة Ethereum أمر جيد تمامًا. لذلك لن أقوم بتغطية أي شيء حول إعداد شبكة هنا لأن التركيز هو استخدام لغة python لإرسال طلبات HTTP إلى عقدة Geth.

إذا كنت تريد فقط رؤية الشفرة الكاملة ، فانتقل إلى الفصل الأخير.

شرط أساسي

1. إرسال طلب بسيط إلى Geth

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

عنوان URL والمنفذ الخاص بعقدة Geth الخاصة بي هما: http: // localhost: 8501 . إذا كنت تستخدم Ganache مع القيمة الافتراضية ، فمن المحتمل أن يكون عنوان URL هو http: // localhost: 7545 .

أستخدم مكتبة طلبات python لإجراء طلبات HTTP الخاصة بي. يكفي الحديث.

يطبع:

وظيفة Goob! من هناك نحن على استعداد للنشر والتعامل مع العقد. أفضل البناء على أسس جيدة. 1515 هو معرف الشبكة الخاص بي لـ Blockchain كما هو محدد في ملف genesis. كل شيء يبدو رائعا. مع Ganache يجب أن تحصل على 5777 لمعرّف الشبكة.

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

2. إنشاء زوج مفاتيح خاص- عام والحصول على بعض الأثير

ستساعدنا مكتبة web3py (الإصدار 4) في إنشاء زوج مفاتيح.

في حالتي ، أحصل على:

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

الآن للحصول على بعض الأثير لهذا العنوان ، هناك عدة طرق:

1. هناك طريقة بسيطة جدًا وهي إضافة هذا العنوان في ملف genesis.json وبدء شبكة جديدة. من دليلي السابق ، إليك ملف التكوين الخاص بي الذي يتضمن العنوان (إزالة 0x ) الذي أنشأناه للتو.

2. إذا كانت لديك عقدة تعدين أو غاناش ، فافتح Geth Javascript Console وأنشئ معاملة يدويًا

هنا أرسل 1000 إيثر من 0x87366 ... إلى عنواني 0xF464A ... . 1 إيثر يساوي 1e18 وي (1 متبوعًا بـ 18 صفرًا). وحدة الحقل value هي wei.

3. في شبكات الاختبار العامة ، استخدم صنبورًا.

3 نشر العقد الذكي والتعامل معه

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

سنستخدم طريقة send_rawTransaction التي تأخذ كمدخلات المعلمات الموقعة للمعاملة.

تبحث شفرة Python عن ملف json الذي يحتوي على العقد abi و bytecode الذي ينشئه الكمأة عند تجميع عقد ذكي. قبل اختبار كود python ، أنشئ مساحة عمل كمأة وقم بتجميع العقد الوهمي AdditionContract.sol .

ثم حدِّث رمز Python بعنوان URL الخاص بعقدة geth ، والمسار إلى مساحة عمل الكمأة وملف التكوين (لا تنسَ استبدال اسم المستخدم الخاص بي باسمك في المسار).

كل شيء آخر في الكود ويجب أن يكون واضحًا بذاته.

أبقيت كل شيء ميتًا بسهولة لتسهيل التعديل والتجريب. استمتع 🙂