Як напісаць смарт-кантракт на 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. Калі так (гэта значыць пройдзена праверка подпісу), функцыя вяртаецца.
  • Праверыць, калі які выклікае бягучую функцыю аб'ект з'яўляецца кантрактам. Калі гэта кантракт і функцыя выконваецца з кантракта, тады верыфікацыя пройдзена. Гэта значыць, верыфікаваць, калі fromAcct якое вяртаецца значэнне 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.

Вы распрацоўшчык? Далучайцеся да нашай тэхнічнай супольнасці на дысананс. Акрамя таго, зазірніце ў Цэнтр распрацоўшчыкаў Ontology, там можна знайсці больш інструментаў, дакументацыю і многае іншае.

Адкрытыя задачы для распрацоўшчыкаў. Закрый задачу - атрымай узнагароду.

Падаць заяўку на праграму талентаў Ontology для студэнтаў

Ontology

Ontology website - GitHub - дысананс - Telegram на рускай - Twitter - Reddit

Крыніца: habr.com

Дадаць каментар