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

صورة

هذا هو البرنامج التعليمي الرسمي الذي تم نشره مسبقًا على مدونة Ontology Medium
متحمس لنشره لقراء هبر. لا تتردد في طرح أي أسئلة ذات صلة واقتراح تنسيق أفضل للمواد التعليمية

مقدمة


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


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

لنبدأ!

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

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


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

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

1.1. GetHeight


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

 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 

1.2 GetHeader


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

 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 

1.3 GetTransactionByHash


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

لنأخذ تجزئة المعاملة بتنسيق ست عشري كمثال لتحويلها إلى تنسيق تراكمي. المثال كالتالي:

 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1 

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

 c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279 

يمكن للمطورين تنفيذ هذه الخطوة باستخدام أداة التحويل Hex Number (endian little) <--> الرقم المقدم من 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 

1.4 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 

1.5 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 

1.6 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 كيفية استخدام كتلة API


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

2.1 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 

2.2 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 

2.3 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 جزءًا لا غنى عنه من العقود الذكية حيث يمكنك استخدامها للاستعلام عن بيانات blockchain وحظر البيانات في العقود الذكية. في المقالات القليلة التالية ، سنناقش كيفية استخدام واجهات برمجة التطبيقات الأخرى لاستكشاف تفاعلها مع blockchain Ontology.



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

البحث عن الأنطولوجيا في مكان آخر


موقع علم الوجود
جيثب / الشقاق
برقية ( الإنجليزية / الروسية )
تويتر / رديت /

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


All Articles