Як написати смарт-контракт на Python у мережі Ontology. Частина 3: Runtime API

Як написати смарт-контракт на Python у мережі Ontology. Частина 3: Runtime API

Це 3-я частина серії навчальних статей про створення смарт-контрактів на Python в блокчейн мережі Ontology. У попередніх статтях ми познайомилися з

  1. Blockchain & Block API
  2. API зберігання.

Тепер, коли Ви маєте уявлення про те, як викликати відповідне API для постійного сховища при розробці смарт-контракту за допомогою Python у мережі Ontology, давайте перейдемо до знайомства з тим, як використовувати Runtime API (Contract Execution API). Runtime API має 8 пов'язаних API, які надають спільні інтерфейси для виконання контракту та допомагають розробникам отримувати, перетворювати та перевіряти дані.

Нижче короткий опис даних 8 API:

Як написати смарт-контракт на Python у мережі Ontology. Частина 3: Runtime API

Давайте детальніше розберемо, як використовувати дані 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")

Ви можете побачити це у логах:

Як написати смарт-контракт на Python у мережі Ontology. Частина 3: Runtime API

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, що викликає поточну функцію. Якщо так (тобто пройдено перевірку підпису), функція повертається.
  • Перевірити, якщо об'єкт, що викликає поточну функцію, є контрактом. Якщо цей договір і функція виконується з договору, тоді верифікація пройдена. Тобто, верифікувати, якщо відAcct повертається значення GetCallingScriptHash(). Функція GetCallingScriptHash() може взяти значення хеша контракту поточного смарт-контракту.

GetCallingScriptHash():

Детальніше на Гутхаб

from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

Більше інформації можна знайти на Гутхаб. У наступній статті ми представимо Native API, щоб освоїти, як передавати активи у смарт-контрактах Ontology

Статтю було перекладено редакцією Hashrate&Shares спеціально для OntologyRussia.

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

Відкриті завдання розробників. Закрий завдання – отримай винагороду.

Подати заявку на програму талантів Ontology для студентів

Онтологія

Ontology website - GitHub - Discord - Telegram російською - Twitter - Reddit

Джерело: habr.com

Додати коментар або відгук