Как да напиша интелигентен договор в Python в мрежата Ontology. Част 1: Blockchain & Block API

Как да напиша интелигентен договор в Python в мрежата Ontology. Част 1: Blockchain & Block API

Това е първата част от поредица от уроци за създаване на интелигентни договори на Python в блокчейн мрежата Ontology с помощта на инструмента за разработка на интелигентни договори. SmartX.

В тази статия ще започнем нашето запознаване с API за интелигентни договори на Ontology. API за интелигентен договор Ontology е разделен на 7 модула:

  1. Blockchain & Block API,
  2. API по време на изпълнение,
  3. API за съхранение,
  4. роден API,
  5. API за надграждане,
  6. API на Execution Engine и
  7. API за статично и динамично повикване.

Blockchain & Block API е основната част от системата за интелигентни договори Ontology. Blockchain API поддържа основни операции за заявки в блокчейн, като получаване на текущата височина на блока, докато Block API поддържа основни операции за заявки за блокове, като например запитване за броя на транзакциите за даден блок.

Да започваме!

Първо създайте нов договор в SmartXи след това следвайте инструкциите по-долу.

1. Как да използвате Blockchain API

Връзките към функциите на интелигентния договор са идентични с връзките на Python. Можете да въведете съответните функции, ако е необходимо. Например следният оператор въвежда функция GetHeight за получаване на текущата височина на блока и функция GetHeader за получаване на заглавката на блока.

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

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

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 като параметри във формат bytearray. Ключът към тази функция е да преобразува хеша на транзакцията в шестнадесетичен формат в хеша на транзакцията във формат bytearray. Това е важна стъпка. В противен случай ще получите грешка, която показва, че няма блок с този хеш на блока. Нека вземем хеша на транзакцията в шестнадесетичен формат като пример, за да го преобразуваме във формат bytearray. Пример изглежда така:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Първо обърнете хеша на транзакцията:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Разработчиците могат да изпълнят тази стъпка с помощта на инструмента за преобразуване на числа Hex Number(little endian), предоставен от 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

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 и ще разберем как те взаимодействат с блокчейна Ontology.

Статията е преведена от редакторите на Hashrate&Shares специално за OntologyRussia. кликване

Вие сте разработчик? Присъединете се към нашата техническа общност на раздор. Освен това разгледайте Център за разработчици на нашия уебсайт, където можете да намерите инструменти за разработчици, документация и др.

Онтология

Източник: www.habr.com

Добавяне на нов коментар