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. плаче
Дали сте програмер? Придружете се на нашата технолошка заедница на Раздор. Исто така, погледнете го Центар за програмери на нашата веб-локација, каде што можете да најдете алатки за програмери, документација и многу повеќе.