Как да напишем смарт контракт на Python в мрежата Ontology. Част 3: Runtime API

Как да напишем смарт контракт на Python в мрежата Ontology. Част 3: Runtime API

Това е третата част от серията обучителни статии за създаване на смарт договори на Python в блокчейн мрежата Ontology. В предишните статии се запознахме с

  1. Blockchain & Block API
  2. Storage API.

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

По-долу е кратко описание на тези 8 API:

Как да напишем смарт контракт на Python в мрежата Ontology. Част 3: Runtime API

Нека разгледаме по-подробно как да използваме тези 8 API. Преди това можете да създадете нов договор в инструмента за разработка на смарт договори Ontology SmartX и да следвате следните инструкции.

Как да използвате API за изпълнение

Съществуват два начина за импорт на 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

API Notify

Функцията Notify предава събитие в цялата мрежа. В следващия пример функцията Notify ще върне hex-стринг "hello world" и ще я предаде в мрежата.

from ontology.interop.System.Runtime import Notify
def demo():
    Notify("hello world")

Можете да видите това в логовете:

Как да напишем смарт контракт на Python в мрежата Ontology. Част 3: Runtime API

API GetTime

Функцията GetTime връща текущата времева отметка, която предоставя Unix времето, в което функцията е била извикана. Единицата за измерване е секунда.

from ontology.interop.System.Runtime import GetTime
def demo():
    time=GetTime()
    return time # return a uint num

API GetCurrentBlockHash

Функцията GetCurrentBlockHash връща хеш на текущия блок.

from ontology.interop.Ontology.Runtime import GetCurrentBlockHash
def demo():
    block_hash = GetCurrentBlockHash()
    return block_hash

Serialize и 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 data

Base58ToAddress и 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():

Научете повече на Guthub

от ontology.interop.System.Runtime импортировать CheckWitness
от ontology.interop.Ontology.Runtime импортировать Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

Повече информация можете да намерите на Guthub. В следващата статия ще представим Native API, за да се научите как да прехвърляте активи в смарт контракта на Ontology.

Статията беше преведена от редакцията Hashrate&Shares специално за OntologyRussia.

Вие разработчик? Присъединете се към нашето техническо общество на Discord. Освен това, погледнете в Център за разработчици Ontology, там можете да намерите повече инструменти, документация и много други.

Отворени задачи за разработчици. Завършете задачата — получете награда.

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

Ontology

Ontology website — GitHub — Discord — Telegram руски — Twitter — Reddit

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster