نحوه نوشتن قرارداد هوشمند در پایتون در شبکه آنتولوژی بخش 1: Blockchain & Block API

نحوه نوشتن قرارداد هوشمند در پایتون در شبکه آنتولوژی بخش 1: Blockchain & Block API

این اولین بخش از مجموعه آموزش های ایجاد قراردادهای هوشمند پایتون در شبکه بلاک چین Ontology با استفاده از ابزار توسعه قرارداد هوشمند است. SmartX.

در این مقاله آشنایی خود را با API قرارداد هوشمند Ontology آغاز خواهیم کرد. API قرارداد هوشمند Ontology به 7 ماژول تقسیم می شود:

  1. Blockchain & Block API,
  2. Runtime API
  3. ذخیره سازی API،
  4. API بومی،
  5. ارتقا API،
  6. Execution Engine API و
  7. API تماس ایستا و پویا.

Blockchain & Block API بخش اصلی سیستم قرارداد هوشمند Ontology است. Blockchain API از عملیات اصلی پرس و جوی بلاک چین، مانند دریافت ارتفاع بلاک فعلی، پشتیبانی می کند، در حالی که Block API از عملیات پرس و جو بلوک اولیه، مانند پرس و جو تعداد تراکنش ها برای یک بلوک معین، پشتیبانی می کند.

بیا شروع کنیم!

ابتدا یک قرارداد جدید ایجاد کنید SmartXو سپس دستورالعمل های زیر را دنبال کنید.

1. نحوه استفاده از Blockchain API

پیوندهای توابع قرارداد هوشمند با پیوندهای پایتون یکسان است. در صورت نیاز می توانید توابع مربوطه را وارد کنید. به عنوان مثال، عبارت زیر یک تابع GetHeight را برای بدست آوردن ارتفاع بلوک فعلی و یک تابع GetHeader را برای دریافت هدر بلوک معرفی می کند.

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

GetHeight

همانطور که در مثال زیر نشان داده شده است، GetHeight برای بدست آوردن آخرین شماره دنباله بلوک در بلاک چین استفاده می شود. در مثال آخر، برای راحتی کار، تابع Main را حذف می کنیم، اما در صورت لزوم می توانید آن را اضافه کنید.

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 برای دریافت هدر بلوک استفاده می شود، پارامتر شماره سریال بلوک در بلاک چین است. مثال:

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 به عنوان پارامتر در قالب بایت آرایه. کلید این تابع تبدیل هش تراکنش در قالب هگز به هش تراکنش در قالب بایت آرایه است. این یک گام مهم است. در غیر این صورت، خطایی دریافت می کنید که نشان می دهد هیچ بلوکی با آن هش بلوک وجود ندارد. بیایید هش تراکنش را در قالب هگز به عنوان مثال در نظر بگیریم تا آن را به فرمت بایت آرایه تبدیل کنیم. یک مثال به این شکل است:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

ابتدا هش تراکنش را معکوس کنید:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

توسعه‌دهندگان می‌توانند این مرحله را با استفاده از ابزار تبدیل شماره Hex Number(little endian)Number ارائه شده توسط SmartX انجام دهند.

سپس نتیجه را به فرمت بایت آرایه تبدیل کنید:

{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 انجام داد. در نهایت، آرایه بایتی به دست آمده را به یک رشته مشابه تبدیل کنید:

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

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 وجود دارد: 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

راهنمای کامل را می توان در سایت ما یافت GitHub.

پس از کلمه

Blockchain & Block API بخشی ضروری از قراردادهای هوشمند است زیرا می توانید از آنها برای درخواست داده های زنجیره بلوکی و مسدود کردن داده ها در قراردادهای هوشمند استفاده کنید. در مقالات آینده، نحوه استفاده از بقیه APIها و نحوه تعامل آنها با بلاک چین آنتولوژی را مورد بحث قرار خواهیم داد.

این مقاله توسط ویراستاران Hashrate&Shares مخصوصاً برای OntologyRussia ترجمه شده است. گریه کردن

آیا شما یک ارتقاء دهنده هستید؟ به جامعه فناوری ما بپیوندید در اختلاف. همچنین، نگاهی به مرکز توسعه دهندگان در وب سایت ما، جایی که می توانید ابزارهای توسعه دهنده، اسناد و موارد دیگر را بیابید.

هستیشناسی

منبع: www.habr.com

اضافه کردن نظر