Kiel verki inteligentan kontrakton en Python en la Ontologio-reto. Parto 3: Runtime API

Kiel verki inteligentan kontrakton en Python en la Ontologio-reto. Parto 3: Runtime API

Ĉi tio estas parto 3 de serio de lerniloj pri kreado de inteligentaj kontraktoj en Python sur la Ontology-blokĉena reto. En antaŭaj artikoloj, ni vidis

  1. Blockchain & Block API
  2. Stokado API.

Nun kiam vi havas ideon pri kiel voki la taŭgan konstantan stokan API kiam vi disvolvas inteligentan kontrakton kun Python en la Ontology-reto, ni plu lernu kiel uzi Runtime API (Contract Execution API). La Runtime API havas 8 rilatajn API-ojn, kiuj provizas komunajn interfacojn por kontrakta ekzekuto kaj helpas programistojn akiri, transformi kaj validigi datumojn.

Malsupre estas mallonga priskribo de datumoj 8 API:

Kiel verki inteligentan kontrakton en Python en la Ontologio-reto. Parto 3: Runtime API

Ni rigardu pli detale kiel uzi ĉi tiujn 8 APIojn. Antaŭ tio, vi povas krei novan kontrakton en la ilo de disvolviĝo de inteligenta kontrakto de Ontology SmartX kaj sekvu la instrukciojn sube.

Kiel uzi Runtime API

Estas du manieroj importi Runtime API: ontology.interop.System.Runtime и ontologio.interop.Ontologio.Runtime. Ontologia vojo enhavas lastatempe aldonitajn APIojn. La subaj linioj importas la API-datumojn.

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash

Sciigi API

La Notify-funkcio dissendas la eventon tra la reto. En la malsupra ekzemplo, la Notify-funkcio resendos la "salutan vorton" heksĉenon kaj dissendos ĝin tra la reto.

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

Vi povas vidi ĉi tion en la protokoloj:

Kiel verki inteligentan kontrakton en Python en la Ontologio-reto. Parto 3: Runtime API

GetTime API

La GetTime-funkcio resendas la nunan tempostampilon, kiu resendas la Uniksan tempon, kiam la funkcio estis vokita. La mezurunuo estas la dua.

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

GetCurrentBlockHash API

La funkcio GetCurrentBlockHash resendas la haŝon de la nuna bloko.

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

Seriigi kaj Deseriigi

Ĉi tio estas paro de seriigo kaj deseriigaj funkcioj. La Serialize-funkcio konvertas objekton al bytearray objekto, kaj la Deserialize-funkcio konvertas bytearray al sia origina objekto. La sekva ekzempla kodo konvertas alvenantajn parametrojn kaj konservas ilin en la konstanta stokado de la kontrakto. Ĝi ankaŭ prenas la datumojn de la konstanta stokado de la kontrakto kaj konvertas ĝin al la origina objekto.

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

Base58AlAddress kaj AddressToBase58

Ĉi tiu paro de adrestradukaj funkcioj. La Base58ToAddress-funkcio konvertas bazo58 kodita adreso al bytearray adreso, kaj AddressToBase58 konvertas bytearray adreson al bazo58 kodita adreso.

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)

Kontrolu Atestanto

La funkcio CheckWitness(fromAcct) havas du funkciojn:

  • Kontrolu ĉu la objekto vokanta la nunan funkcion estas fromAcct. Se jes (tio estas, subskriba konfirmo pasis), la funkcio revenas.
  • Kontrolu ĉu la objekto vokanta la nunan funkcion estas kontrakto. Se ĝi estas kontrakto kaj la funkcio estas efektivigita de la kontrakto, tiam konfirmo estas pasita. Tio estas, kontroli ĉu fromAcct estas la revena valoro de GetCallingScriptHash(). La funkcio GetCallingScriptHash() povas preni la kontraktan hashvaloron de la nuna inteligenta kontrakto.

GetCallingScriptHash ():

Pli antaŭen Guthub

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

Pliaj informoj troveblas ĉe Guthub. En la sekva artikolo, ni prezentos Indiĝena APIlerni kiel translokigi aktivojn en Ontology inteligentaj kontraktoj.

La artikolo estis tradukita de la redaktoroj Hashrate&Akcioj precipe por OntologioRusio.

Ĉu vi estas programisto? Aliĝu al nia teknika komunumo ĉe Malkonkordo. Ankaŭ, rigardu Centro de Programistoj Ontologio por pli da iloj, dokumentaro kaj pli.

Malfermu taskojn por programistoj. Fermu la taskon - ricevu rekompencon.

Apliki por la Ontologio-talentoprogramo por studentoj

ontologio

Ontologia retejo - GitHub - Malkonkordo - Telegramo rusa - Twitter - Reddit

fonto: www.habr.com

Aldoni komenton