Как разработать смарт-контракт с помощью Python в сети Ontology
Часть третья
Все упомянутые логотипы и торговые марки являются собственностью соответствующих компаний.
Оригинал текста. Перевод hashrate-and-shares.ru.
Предисловие
В предыдущей статье о технических особенностях мы познакомились с Storage API смарт-контракта Ontology. Теперь, когда Вы имеете представление о том, как вызвать подходящее API для постоянного хранилища при разработке смарт-контракта с помощью Python в сети Ontology, давайте перейдём к знакомству с тем, как использовать Runtime API (Contract Execution API). Runtime API имеет 8 связанных API, которые предоставляют общие интерфейсы для выполнения контракта и помогают разработчикам получать, преобразовывать и проверять данные.
Ниже краткое описание данных 8 API:
Название API | Return Value | Описание |
---|---|---|
Runtime.GetTime | uint | Вернуть отметку времени самого последнего блока. |
GetCurrentBlockHash | string | Вернуть хеш самого последнего блока. |
Runtime.Notify(object[]) | void | Отправка уведомлений в смарт-контракте (включая уведомления сокетов или запросы rpc) клиентам, которые выполняют данный смарт- контракт. |
Serialize(item) | byte array | Преобразовывает элемент в bytearray. |
Deserialize(item) | original type | Преобразовывает элемент из bytearray. |
Base58toAddress(base58_address) | byte array | Преобразовать адрес base58 в адрес в виде bytearray. |
AddressToBase58(address) | string | Преобразовать адрес в виде bytearray в адрес base58. |
Runtime.CheckWitness(hash_or_pubkey : byte[]) | bool | Верифицировать операционные полномочия пользователя или контракта. |
Давайте более подробно разберём, как использовать данные 8 API. Перед этим Вы можете создать новый контракт в инструменте разработки смарт-контрактов Ontology SmartX и следовать нижеприведённым инструкциям. Как обычно, в конце статьи мы предоставим ссылку на исходный код.
Как использовать Runtime API
Существует два пути для импорта Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ontology путь содержит недавно добавленные API. Нижеприведённые строки импортируют данные API.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
Notify API
Функция Notify транслирует событие по всей сети. В нижеприведённом примере функция Notify вернёт hex-строку “hello word” и передаст её по всей сети.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")
Вы можете увидеть это в логах:
GetTime API
Функция GetTime возвращает текущую метку времени, которая возвращает Unix- время, в которое функция была вызвана. Единица измерения — секунда.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
GetCurrentBlockHash API
Функция GetCurrentBlockHash возвращает хеш текущего блока.
from ontology.interop.Ontology.Runtime import GetCurrentBlockHash
def demo():
block_hash = GetCurrentBlockHash()
return block_hash
Serialize и Deserialize
Это пара функций сериализации и десериализации. Функция Serialize преобразовывает объект в объект bytearray, а функция Deserialize преобразовывает bytearray в первоначальный объект. Нижеприведённый образец кода осуществляет преобразование входящих параметров и сохраняет их в постоянном хранилище контракта. Он также извлекает данные из постоянного хранилища контракта и преобразует их в первоначальный объект.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.System.Storage import Put, Get, GetContext
def Main(operation, args):
if operation == 'serialize_to_bytearray':
data = args[0]
return serialize_to_bytearray(data)
if operation == 'deserialize_from_bytearray':
key = args[0]
return deserialize_from_bytearray(key)
return False
def serialize_to_bytearray(data):
sc = GetContext()
key = "1"
byte_data = Serialize(data)
Put(sc, key, byte_data)
def deserialize_from_bytearray(key):
sc = GetContext()
byte_data = Get(sc, key)
data = Deserialize(byte_data)
return data
Base58ToAddress и AddressToBase58
Эта пара функций преобразования адресов. Функция Base58ToAddress преобразует закодированный адрес base58 в адрес в форме bytearray, а AddressToBase58 преобразует адрес в форме bytearray в закодированный адрес base58.
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58
def demo():
base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn"
addr=Base58ToAddress(base58_addr)
Log(addr)
base58_addr=AddressToBase58(addr)
Log(base58_addr)
CheckWitness
Функция CheckWitness(fromAcct) имеет две функциональности:
- Верифицировать, если вызывающий текущую функцию объект fromAcct. Если да (то есть пройдена проверка подписи), функция возвращается.
- Проверить, если вызывающий текущую функцию объект является контрактом. Если это контракт и функция выполняется из контракта, тогда верификация пройдена. То есть, верифицировать, если fromAcct возвращаемое значение GetCallingScriptHash(). Функция GetCallingScriptHash() может взять значение хеша контракта текущего смарт- контракта.
GetCallingScriptHash():
Подробно на Guthub.
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return res
Хотите больше деталей? Вы можете найти полное руководство на Guthub.
Заключение
В этой статье мы познакомились с Runtime API блокчейна Ontology, что очень важно в смарт- контракте Ontology, написанном на Python. В следующей статье мы представим Native API, чтобы освоить, как передавать активы в смарт- контрактах Ontology.
Вы разработчик? Присоединяйтесь к нашему техническому сообществу на Discord. Кроме того, загляните в Центр разработчиков на нашем сайте, там вы можете найти инструменты разработчика, документацию и многое другое.
Об Ontology
- Ontology: подробно об Ontology, новости Ontology, курс ONT онлайн
- Как разработать смарт-контракт с помощью Python в сети Ontology. Часть третья
- Как разработать смарт-контракт с помощью Python в сети Ontology. Часть первая
- Обзор ONTO Wallet и стейкинга криптовалюты Ontology
- Как разработать смарт-контракт с помощью Python в сети Ontology. Часть вторая
Новости Ontology
На сайте
- AMA с Dexaran для русского комьюнити от 14.09.2019
- Binance Labs инвестирует в производителя аппаратных кошельков NGRAVE
- Описание и обзоры известных пулов для майнинга
- Графики изменения курса эфириума в реальном времени к USD и USDT
- Что такое Pirl 2.0 и какие изменения произойдут в сети Pirl
- Разбор крипторынка на 26 декабря 2022 года
- Графики изменения курса ONT (Ontology) в реальном времени к USD и USDT
- Acuity: подробная информация о Acuity, курс ACU онлайн к доллару и рублю
- Подробный обзор и опыт использования пула comining.io
- Анализ рынка криптовалют на 16 апреля 2023 года
09.11.2019