البلوكتشين والعقود الذكية

كيف يمكننا إرسال معاملة باستخدام webster

سنستذكر من المقالة السابقة اثنين من واجهات برمجة التطبيقات الرئيسية من Ethereum للتفاعل مع عقد ذكي

IMG 20240407 174834 704

الأولى: استدعاء لواجهة برمجة التطبيقات ويمكنك قراءة البيانات من عقد ذكي

الثانية: معاملة واجهة برمجة التطبيقات الثانية، يمكنك بالفعل تعديل خط عقدك الذكي

سندرس في هذا المقال الواجهة الثانية الآن.

نقوم بفتح واجهة برمجية فارغة كالآتي كنا نقوم بفتحها في المقالات السابقة.

صورة 71

ونقوم بإنشاء مشروع كمأة بسيط في الواجهة اليمينية.

صورة 72

ونقوم بكتابة عقدنا الذكي الخاص بنا.

صورة 73

وهو كما يظهر لنا الآن عبارة عن تجميع أكواد بسيطة وسهلة للغاية.

صورة 74

لدينا متغير عدد صحيح واحد، ووظيفة للحصول على قيمة هذا المتغير، ووظيفة أخرى لتغيير قيمتها.

الآن سنفتح ملف ال scrip الخاص بي وذلك بكتابة index.js في أسفل القائمة اليمينية، حيث يتم إنشاء مثيل ال web3 ثم إنشاء عقد.

صورة 75

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

لدينا أي عنوان في الكود الخاص بنا وسنقوم بإصلاح هذا الأمر، لذا دعنا نحصل على جميع عناوين كلماتنا، لذا سيكون هذا هو الحساب 10 غير المؤمن ل ganache، ولكن عند الاتصال ولتقليل هذا الأمر ليكون العنوان s للمستخدم وهو الذي يحصل على حساب، إن الترتيب السابق سيعيد لنا مصفوفة من جميع عناويننا، لذا الآن سنقوم بأخذ أول عنوان addresses وبعد ذلك يمكننا تمرير بعض المعلمات أو الإشارات الأخرى إلى كائن معاملتك.

صورة 76

وعلى سبيل المثال: يمكننا تحديد حد الغاز فقط gas=100 هذا هو الغاز المنبعث من اسم المعلمة هو غاز فقط.

صورة 77

ثم يمكننا تحديد سعر الغاز gas price: 100.

صورة 78

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

في معظم الحالات لا يتعين عليك وضع هذه القيمة، ولكن إذا لاحظت أن معاملتك تجاوزت هذه القيمة وهي الغاز فيمكنك تخصيص هذا بشكل جيد من خلال وضع عدة أقواس ضمن الكود البرمجي كالآتي:

صورة 79

قمنا بإغلاق كل شيء بالطريقة التي لا يزال فيها هناك معلمة لإرسال بعض الأثير في معاملتك.

الآن نستخدم ضمن الكود التعليمة ((await كما تم استخدامها بالمقالة السابقة.

صورة 80

الآن سنقوم بتعدين المعاملة على blockchain ونظراً لأننا نستخدم blockchain للتطوير المحلي، ستكون عملية التعدين فورية، ولكن في حال الرفض على شبكة الاختبار العامة سنحتاج إلى الانتظار حتى تكون معاملتنا جاهزة وعادة يتم الانتظار 15 ثانية، لذلك عندما نصل إلى السطر التالي:

صورة 81

من التنفيذ هذا يعني أن المعاملة قد تم بثها إلى Ethereum blockchain ولكن في هذه المرحلة لا يعني ذلك أن المعاملة أصبحت لنا بالفعل كما نوهنا لذلك من قبل لأننا نستخدم ganache للتنمية المحلية، فسيكون هذا فورية بعد ذلك مباشرة.

يمكننا التحقق من قيمة بياناتنا، لذا نقوم بتسمية الوظيفة للحصول على بيانات الويب، وسنقوم بقفل الكود البرمجي في نهايته، وسنرى قيمة جديدة.

صورة 82

الآن سنبدأ في تشغيل مثيل ganache مع تطوير الكمأة وذلك في الواجهة البرمجية اليسارية.

صورة 83

وسنقوم بنشر عقدنا الذكي وذلك بكتابة: migrate –reset في نهاية الكود البرمجي في الواجهة اليسارية.

صورة 84

ونلاحظ من الواجهة اليمينية أننا نسينا شيئاً مهماً جدا ألا وهو رمز الوزن.

صورة 85

وأيضا نسينا شيئا مهما آخر ألا وهو عقد هذه الطريقة للحصول على البيانات.

صورة 86

الآن يمكننا تشغيل البرنامج النصي الخاص بنا وذلك بالكتابة بالواجهة اليمينية الكود التالي: de index.js.

صورة 87

ويمكننا الآن أن نرى أنه حقا تمت تغيير قيمة العدد الصحيح في العقد الذكي وأصبحت قيمتها 10, لذا إن كل شيء على ما يرام الآن.

صورة 88

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

صورة 89

نقوم بكتابة: de index.js بالواجهة اليمينية وسيظهر لنا الآتي:

صورة 90

نجد أنه لدينا كائن كبير وسننتقل إليه مباشرة, لذا سنقوم بتجزئة المعاملة أولاً وهي عبارة عن سلسلة صور للخروج تحدد بشكل فريد معاملتك على البلوكتشين, على سبيل المثال يمكنك استخدام هذا لإنشاء رابط إلى مستكشف البلوكتشين مثل ether scan بقيمة تجزئة المعاملة بحيث يمكن للمستخدم النهائي الحصول على تأكيد على مسح الأثير الذي كانت معاملته لي, ثم لديك معلومات أخرى مثل تجزئة الكتلة التي كانت المعاملة الخاصة بي فيها, هناك بعض المعلومات حول الكتلة مرة أخرى, ثم عنوان المعاملة المستلم لهذه المعاملات, لذلك في حالتنا هو عنوان هذا العقد كما تم استخدام الغاز في هذا الأمر.

صورة 91

نجد في أسفل الواجهة موجود (vrs) يمكنك تجاهل هذا لأنها معلمات متعلقة بتوقيعك لذا في معظم الحالات لا تحتاج إلى التعامل معها والأحداث التي تحدث إذا استخدمت البريد الإلكتروني ميزة صلابة الحدث في العقد الذكي.

صورة 92

وبالعودة إلى البرنامج النصي الخاص بنا، نجد أنه لدينا طريق واحد لإرسال المعاملة.

صورة 93

وبدلاً من استخدام الكلمة الأساسية للانتظار(await)، يمكننا الانتظار بطريقة أخرى، نلجأ إلى الطريقة القديمة التي نستخدم فيها وظيفة then بشكل أساسي، وستتلقى هنا إيصالا لتفعل ما تريد فعله.

صورة 94

لذلك يجب أن نفهم بشكل جيد أننا بحاجة إلى وضع بقية الكود الخاص بنا داخل مجموعة التعليمات الثابتة هذه بعد وضع بعض التعليمات البرمجية مباشرة كهاتين الإشارتين: //

صورة 95

وبعد ذلك يستمر التنفيذ على الفور حتى الوصول إلى الحد الأخير أي إلى // في نهاية الكود.

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

صورة 96

لذا لاتزال هناك طرق أخرى لتنفيذ المعاملة حتى الآن، لقد استخدمنا واجهة برمجة تطبيقات الويب المستندة ل web3, ولكن هناك أيضا واجهة برمجة تطبيقات للبعث، لذا في هذه الحالة يمكنك وضع نقطة ثم اسم الحدث ويتم استلام ما يعادل ما فعلناه من قبل، وسيمنحك كائن الاتصال ثم تقوم بتمريره لرد الاتصال ثم تفعل ما تريد بداخله.

صورة 97

ثم هناك حدث آخر قيد التأكيد، لذا سيعطيك هذا وسيطين _ يمكنك الاتصال مرة أخرى وبالتالي رقم التأكيد والإيصال، ثم تفعل كل ما تريده في رد الاتصال الخاص بك.

صورة 98

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

وبكتابة الكتلة البرمجية التالية:

صورة 99

هذه الكتلة البرمجية ستمنحك كائن الخطأ ومن ثم استلام المعاملة، ولا تزال هناك طريقة أخرى لتنفيذ المعاملة، وهذه هي طريقة رد الاتصال.

صورة 100

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

صورة 101

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

Add a subheading 970 × 150

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.

زر الذهاب إلى الأعلى