
Това е първата част от серията обучителни статии за създаване на смарт контракти на Python в блокчейн мрежата Ontology с помощта на инструмента за разработка на смарт контракти. .
В тази статия ще започнем запознаването с API на смарт контракта Ontology. API на смарт контракта Ontology е разделен на 7 модула:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API и
- Static & Dynamic Call API.
Blockchain & Block API е основната част от системата за смарт контракти Ontology. Blockchain API поддържа основни операции за блокчейн запитвания, като например получаване на текущата височина на блока, докато Block API поддържа основни операции за блокови запитвания, като например запитване за броя транзакции за даден блок.
Нека да започнем!
Първо създайте нов контракт в , а след това следвайте инструкциите по-долу.
1. Как да използвате Blockchain API
Линковете към функциите на смарт контрактите са идентични на линковете в Python. Можете да въвеждате съответните функции по необходимост. Например, долупосочената инструкция въвежда GetHeight — функция за получаване на текущата височина на блока, и GetHeader — функция за получаване на заглавието на блока.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
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 functionGetHeader
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 headerGetTransactionByHash
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 txGetTransactionHeight
GetTransactionHeight се използва за получаване на височината на транзакцията по хеш на транзакцията. Нека да вземем хеш от примера по-горе:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Разработчиците могат да използват функцията GetContract, за да получат договора по хеш на договора. Процесът на преобразуване на хеша на договора е аналогичен на процеса на преобразуване на хеша на транзакцията, споменат по-горе.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock се използва за получаване на блок. Има два начина да се получи конкретен блок.
1. Получаване на блок по височината на блока:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Получаване на блок по хеш на блока:
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 countGetTransactions
Разработчиците могат да използват функцията GetTransactions, за да получат всички транзакции в дадения блок.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions
def demo():
block=GetBlock(1408)
txs=GetTransactions(block)
return txsGetTransactionByIndex
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Пълното ръководство можете да намерите на нашия .
Следсловие
Blockchain & Block API е неотменима част от смарт-договорите, тъй като можете да ги използвате, за да искате данни от блокчейна и данни от блока в смарт-договорите. В следващите статии ще обсъдим как да използваме останалите API и ще разгледаме тяхното взаимодействие с блокчейна Ontology.
Статията беше преведена от редакцията на Hashrate&Shares специално за OntologyRussia.
Вие ли сте разработчик? Присъединете се към нашата техническа общност на . Освен това, погледнете в на нашия сайт, там можете да намерите инструменти за разработчици, документация и много друго.
Ontology
- /
- Telegram /
- /
Източник: habr.com
