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. клік
Ви розробник? Приєднуйтесь до нашої технічної спільноти на Discord. Крім того, загляньте в Центр розробників на нашому сайті, там ви можете знайти інструменти розробника, документацію та багато іншого.