
Това е 3-та част от серията обучаващи статии за създаване на смарт-договори на Python в блокчейн мрежата Ontology. В предишните статии се запознахме с
- .
Сега, когато имате представа как да извикате подходящото API за перманентно хранилище при разработка на смарт-договор с Python в мрежата Ontology, нека се запознаем с това как да използваме Runtime API (Contract Execution API). Runtime API разполага с 8 свързани API, които предоставят общи интерфейси за изпълнение на договора и помагат на разработчиците да получават, преобразуват и проверяват данни.
По-долу е кратко описание на тези 8 API:

Нека разгледаме по-подробно как да използваме тези 8 API. Преди това можете да създадете нов договор в инструмента за разработка на смарт-договори Ontology и да следвате инструкциите по-долу.
Как да използвате 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, GetCurrentBlockHashNotify API
Функцията Notify предава събитие през цялата мрежа. В примера по-долу функцията Notify ще върне hex-стринга "hello world" и ще я разпространи в мрежата.
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 numGetCurrentBlockHash API
Функцията GetCurrentBlockHash връща хеш на текущия блок.
from ontology.interop.Ontology.Runtime import GetCurrentBlockHash
def demo():
block_hash = GetCurrentBlockHash()
return block_hashSerialize и Deserialize
Това е двойка функции за сериализация и десериализация. Функцията Serialize преобразува обект в bytearray, а функцията Deserialize преобразува bytearray обратно в оригиналния обект. Примерният код по-долу осъществява преобразуването на входните параметри и ги запазва в перманентно хранилище на договора. Също така извлича данни от перманентното хранилище на договора и ги преобразува обратно в оригиналния обект.
от ontology.interop.System.Runtime импортирайте GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
от ontology.interop.System.Storage импортирайте Put, Get, GetContext
def Main(operation, args):
ако operation == 'serialize_to_bytearray':
data = args[0]
return serialize_to_bytearray(data)
ако 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 dataBase58ToAddress и AddressToBase58
Тази двойка функции преобразува адреси. Функцията Base58ToAddress преобразува кодирания адрес base58 в адрес във формат bytearray, а AddressToBase58 преобразува адреса във формат bytearray в кодирания адрес base58.
от ontology.interop.Ontology.Runtime импортирайте 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():
Повече информация на
от ontology.interop.System.Runtime импортирайте CheckWitness
от ontology.interop.Ontology.Runtime импортирайте Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return resПовече информация може да бъде намерена на . В следващата статия ще представим Native API, за да научите как да прехвърляте активи в смарт договори на Ontology.
Статията беше преведена от редакцията на специално за OntologyRussia.
Вие ли сте разработчик? Присъединете се към нашата техническа общност на . Освен това, погледнете в Ontology, където можете да намерите повече инструменти, документация и много други.
Затворете задачата — получете награда.
за програмата за таланти Ontology за студенти
Ontology
— — — — —
Източник: habr.com
