ProHoster > блог > адміністраванне > Як напісаць смарт-кантракт на Python у сетцы Ontology. Частка 1: Blockchain & Block API
Як напісаць смарт-кантракт на Python у сетцы Ontology. Частка 1: Blockchain & Block API
Гэта першая частка з серыі навучальных артыкулаў аб стварэнні смарт-кантрактаў на Python у блокчейн сеткі Ontology пры дапамозе інструмента распрацоўкі смарт-кантрактаў. SmartX.
У гэтым артыкуле мы пачнем знаёмства з 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 падтрымлівае базавыя аперацыі блок-запыту, як напрыклад запытванне колькасці транзакцый для дадзенага блока.
Давайце прыступім!
Для пачатку стварыце новы кантракт у 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. Прыклад выглядае наступным чынам:
Гэта можна зрабіць з дапамогай інструмента пераўтварэнні String Byte Array, які прадастаўляецца SmartX. Напрыканцы, пераўтварыце атрыманы bytearray у такі радок:
Распрацоўнікі могуць выкарыстоўваць функцыю GetContract, каб атрымаць кантракт з дапамогай хеша кантракту. Працэс пераўтварэння хеша кантракту з'яўляецца адпаведным працэсу пераўтварэння хеша транзакцыі, які згаданы вышэй.
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
Blockchain & Block API з'яўляецца незаменнай часткай смарт-кантрактаў, паколькі Вы можаце выкарыстоўваць іх, каб запытаць дадзеныя блокчейна і дадзеныя блока ў смарт-кантрактах. У наступных артыкулах мы абмяркуем, як выкарыстоўваць астатнія API і высветлім іх узаемадзеянне з блокчейном Ontology.
Артыкул быў перакладзены рэдакцыяй Hashrate&Shares спецыяльна для OntologyRussia. клік
Вы распрацоўшчык? Далучайцеся да нашай тэхнічнай супольнасці на дысананс. Акрамя таго, зазірніце ў Цэнтр распрацоўшчыкаў на нашым сайце, там вы можаце знайсці інструменты распрацоўшчыка, дакументацыю і многае іншае.