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

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

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

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

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

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

هيا بنا نبدأ!

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

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

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

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

احصل على الارتفاع

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

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

فيما يلي مثال على وظيفة GetTransactionByHash ، التي تأخذ معاملة باستخدام تجزئة المعاملة:

from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
    # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    tx=GetTransactionByHash(tx_hash)
    return tx

احصل على ارتفاع المعاملات

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

from ontology.interop.System.Blockchain import  GetTransactionHeight
def demo():
    #   tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    height=GetTransactionHeight(tx_hash)
    return height

GetContract

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

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    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'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
    block=GetBlock(block_hash)

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

هناك ثلاث وظائف متاحة في Block API: احصل على المعاملات, GetTransactionCountو احصل على TransactionByIndex. سنقوم بتقسيمهم واحدًا تلو الآخر.

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 للحصول على جميع المعاملات في كتلة معينة.

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

احصل على TransactionByIndex

يستخدم 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

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

خاتمة

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

تمت ترجمة المقال من قبل محرري Hashrate & Shares خصيصًا لـ OntologyRussia. انقر

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

علم الوجود

المصدر: www.habr.com

إضافة تعليق