Как да напишем смарт-контракт на 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. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API и
  7. Static & Dynamic Call 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 се използва за получаване на последния пореден номер на блока в блокчейна, както е показано в долния пример. В последния пример за удобство ще пропуснем функцията 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 като параметри във формат bytearray. Ключът на тази функция е преобразуването на хеша на транзакцията от hex формат в хеш на транзакцията в формат bytearray. Това е важна стъпка. В противен случай бихте получили грешка, която указва, че няма блок с такъв хеш. Нека да вземем хеш на транзакцията в hex формат като пример, за да го конвертираме в формат bytearray. Примерът изглежда по следния начин:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

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

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

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

Пълното ръководство можете да намерите на нашия GitHub.

Следсловие

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

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

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

Ontology

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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster