Как да напишем смарт-контракт на 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