كيفية كتابة عقد بيثون ذكي على شبكة الأنطولوجيا. الجزء 1: Blockchain وبلوك API

صورة

هذا هو الجزء الأول من سلسلة من الدروس حول إنشاء عقود ذكية في Python على شبكة Ontchain blockchain باستخدام أداة تطوير العقود الذكية SmartX .

في هذه المقالة ، سنبدأ تقديمنا لواجهة API الأنطولوجية للعقد الذكية. واجهة برمجة تطبيقات عقد العقد الأنطولوجي الذكية مقسمة إلى 7 وحدات:

  1. Blockchain & Block API،
  2. API التخزين
  3. وقت تشغيل API
  4. API الأصلي
  5. ترقية API
  6. تنفيذ محرك API و
  7. ثابت وديناميكي دعوة API.

تعد واجهة برمجة تطبيقات Blockchain & Block جزءًا أساسيًا من نظام العقد الذكي لـ Ontology. يدعم Blockchain API عمليات طلب blockchain الأساسية ، مثل الحصول على ارتفاع الكتلة الحالي ، بينما يدعم Block API عمليات طلب الكتلة الأساسية ، مثل طلب عدد المعاملات لكتلة معينة.

لنبدأ!

للبدء ، قم بإنشاء عقد جديد في SmartX ، ثم اتبع الإرشادات أدناه.

1. كيفية استخدام Blockchain API


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

from ontology.interop.System.Blockchain import GetHeight, GetHeader 

GetHeight


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

 from ontology.interop.System.Runtime import Notify from ontology.interop.System.Blockchain import GetHeight def Main(operation): if operation == 'demo': return demo() return False def demo(): height=GetHeight() Notify(height) # print height return height #return height after running the function 

GetHeader


GetHeader ، تستخدم للحصول على عنوان الكتلة ، المعلمة هي الرقم التسلسلي للكتلة في blockchain. مثال:

 from ontology.interop.System.Runtime import Notify from ontology.interop.System.Blockchain import GetHeader def demo(): block_height=10 header=GetHeader(block_height) Notify(header) return header 

GetTransactionByHash


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

 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1 

أول عكس تجزئة المعاملة:

 c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279 

يمكن للمطورين اتخاذ هذه الخطوة باستخدام أداة تحويل الرقم السداسي (رقم عشري صغير) التي يوفرها SmartX.

ثم تحويل النتيجة إلى تنسيق bytearray:

 {0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f} 

يمكن القيام بذلك باستخدام أداة تحويل String Byte Array المقدمة من SmartX. أخيرًا ، قم بتحويل bytearray الناتج إلى سلسلة مماثلة:

 \xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f 

التالي مثال عن دالة GetTransactionByHash تأخذ معاملة باستخدام تجزئة معاملة:

 from ontology.interop.System.Blockchain import GetTransactionByHash def demo(): # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1" tx_hash=bytearray(b"\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f") tx=GetTransactionByHash(tx_hash) return tx 


GetTransactionHeight


يتم استخدام GetTransactionHeight للحصول على ذروة المعاملة من خلال تجزئة المعاملة. لنأخذ التجزئة من المثال أعلاه:

 from ontology.interop.System.Blockchain import GetTransactionHeight def demo(): # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1" tx_hash=bytearray(b"\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f") height=GetTransactionHeight(tx_hash) return height 

GetContract


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

 from ontology.interop.System.Blockchain import GetContract def demo(): # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa" contract_hash=bytearray(b"\xfa\x98\x96\x21\x32\x32\xbb\xf0\x9f\x23\x91\xfa\xef\x95\x9b\xff\xa5\x75\x1a\xd8") contract=GetContract(contract_hash) return contract 

GetBlock


يستخدم GetBlock للحصول على كتلة. هناك طريقتان للحصول على كتلة محددة.

1. الحصول على كتلة من ارتفاع كتلة:

 from ontology.interop.System.Blockchain import GetBlock def demo(): block=GetBlock(1408) return block 

2. الحصول على كتلة من قبل كتلة التجزئة:

 from ontology.interop.System.Blockchain import GetBlock def demo(): block_hash=bytearray(b'\x16\xe0\xc5\x40\x82\x79\x77\x30\x44\xea\x66\xc8\xc4\x5d\x17\xf7\x17\x73\x92\x33\x6d\x54\xe3\x48\x46\x0b\xc3\x2f\xe2\x15\x03\xe4') block=GetBlock(block_hash) 

2. كيفية استخدام Block API


هناك ثلاث وظائف متوفرة في Block API: GetTransactions و GetTransactionCount و GetTransactionByIndex . سنقوم بفرزها واحدا تلو الآخر.

GetTransactionCount


يتم استخدام GetTransactionCount للحصول على عدد المعاملات كتلة معينة.

 from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionCount def demo(): block=GetBlock(1408) count=GetTransactionCount(block) return count 

GetTransactions


يمكن للمطورين استخدام الدالة GetTransactions للحصول على جميع المعاملات في هذه الكتلة.

 from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactions def demo(): block=GetBlock(1408) txs=GetTransactions(block) return txs 

GetTransactionByIndex


يتم استخدام GetTransactionByIndex للحصول على معاملة محددة في هذه الكتلة.

 from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionByIndex def demo(): block=GetBlock(1408) tx=GetTransactionByIndex(block,0) # index starts from 0. return tx 

يمكن العثور على الدليل الكامل على جيثب لدينا.

خاتمة


يعد Blockchain & Block API جزءًا لا غنى عنه من العقود الذكية ، لأنه يمكنك استخدامها لطلب بيانات blockchain وحظر البيانات في العقود الذكية. في المقالات التالية ، سنناقش كيفية استخدام بقية واجهات برمجة التطبيقات ومعرفة تفاعلها مع blockchain Ontology.


تمت ترجمة المقال بواسطة Hashrate & Shares خصيصًا لـ OntologyRussia. انقر
هل أنت مطور؟ انضم إلى مجتمع التكنولوجيا الخاص بنا على Discord . بالإضافة إلى ذلك ، ألق نظرة على مركز المطور على موقعنا ، حيث يمكنك العثور على أدوات مطور البرامج والوثائق وغير ذلك الكثير.

علم الوجود


Source: https://habr.com/ru/post/ar474966/


All Articles