Тепер, коли Ви маєте уявлення про те, як викликати відповідне API для постійного сховища при розробці смарт-контракту за допомогою Python у мережі Ontology, давайте перейдемо до знайомства з тим, як використовувати Runtime API (Contract Execution API). Runtime API має 8 пов'язаних API, які надають спільні інтерфейси для виконання контракту та допомагають розробникам отримувати, перетворювати та перевіряти дані.
Нижче короткий опис даних 8 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")
Ви можете побачити це у логах:
GetTime API
Функція GetTime повертає поточну позначку часу, яка повертає Unix-час, у який функція була викликана. Одиниця виміру - секунда.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
GetCurrentBlockHash API
Функція GetCurrentBlockHash повертає хеш поточного блоку.
Це пара функцій серіалізації та десеріалізації. Функція 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.
Функція CheckWitness (fromAcct) має дві функціональності:
Верифікувати, якщо об'єкт fromAcct, що викликає поточну функцію. Якщо так (тобто пройдено перевірку підпису), функція повертається.
Перевірити, якщо об'єкт, що викликає поточну функцію, є контрактом. Якщо цей договір і функція виконується з договору, тоді верифікація пройдена. Тобто, верифікувати, якщо відAcct повертається значення 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, там можна знайти більше інструментів, документацію та багато іншого.