Jak napsat chytrou smlouvu v Pythonu na síti Ontology. Část 3: Runtime API

Jak napsat chytrou smlouvu v Pythonu na síti Ontology. Část 3: Runtime API

Toto je část 3 série výukových programů o vytváření chytrých smluv v Pythonu na blockchainové síti Ontology. V předchozích článcích jsme viděli

  1. Blockchain & Block API
  2. Storage API.

Nyní, když máte představu o tom, jak zavolat příslušné API pro trvalé úložiště při vývoji chytré smlouvy s Pythonem v síti Ontology, pojďme se naučit, jak používat Runtime API (Contract Execution API). Runtime API má 8 souvisejících rozhraní API, která poskytují společná rozhraní pro provádění smluv a pomáhají vývojářům získávat, transformovat a ověřovat data.

Níže je uveden stručný popis dat 8 API:

Jak napsat chytrou smlouvu v Pythonu na síti Ontology. Část 3: Runtime API

Pojďme se blíže podívat na to, jak těchto 8 API používat. Předtím můžete vytvořit novou smlouvu v nástroji pro vývoj inteligentních smluv Ontology SmartX a postupujte podle pokynů níže.

Jak používat Runtime API

Existují dva způsoby importu Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Cesta ontologie obsahuje nově přidaná rozhraní API. Níže uvedené řádky importují data API.

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

Upozornit API

Funkce Upozornit vysílá událost po celé síti. V níže uvedeném příkladu funkce Upozornit vrátí hexadecimální řetězec „ahoj slovo“ a rozešle jej po síti.

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

Můžete to vidět v logech:

Jak napsat chytrou smlouvu v Pythonu na síti Ontology. Část 3: Runtime API

GetTime API

Funkce GetTime vrací aktuální časové razítko, které vrací Unixový čas, ve kterém byla funkce volána. Jednotkou měření je druhá.

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

GetCurrentBlockHash API

Funkce GetCurrentBlockHash vrací hash aktuálního bloku.

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

Serializovat a deserializovat

Jedná se o dvojici funkcí serializace a deserializace. Funkce Serialize převede objekt na objekt bytearray a funkce Deserialize převede objekt bytearray na jeho původní objekt. Následující ukázkový kód převádí příchozí parametry a ukládá je do trvalého úložiště smlouvy. Také načte data z trvalého úložiště smlouvy a převede je na původní objekt.

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 a AddressToBase58

Tato dvojice funkcí překladu adres. Funkce Base58ToAddress převede adresu zakódovanou v base58 na adresu bajtray a AddressToBase58 převede adresu v bajtovém paprsku na adresu zakódovanou v 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)

Zkontrolujte svědka

Funkce CheckWitness(fromAcct) má dvě funkce:

  • Ověřte, zda je objekt volající aktuální funkci fromAcct. Pokud ano (tj. ověření podpisu proběhlo úspěšně), funkce se vrátí.
  • Zkontrolujte, zda objekt volající aktuální funkci je kontrakt. Pokud se jedná o smlouvu a funkce je vykonávána ze smlouvy, pak ověření projde. To znamená, že ověřte, zda fromAcct je vrácená hodnota GetCallingScriptHash(). Funkce GetCallingScriptHash() může převzít hodnotu hash smlouvy aktuální inteligentní smlouvy.

GetCallingScriptHash():

Přečtěte si více v 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

Více informací naleznete na Guthub. V příštím článku představíme Nativní APIse dozvíte, jak převádět aktiva v inteligentních smlouvách Ontology.

Článek přeložila redakce Hashrate&Shares zejména pro OntologyRussia.

Jste vývojář? Připojte se k naší technické komunitě na Svár. Také se podívejte na Vývojářské centrum Ontologie pro další nástroje, dokumentaci a další.

Otevřené úlohy pro vývojáře. Uzavřete úkol – získejte odměnu.

Aplikovat pro talentový program Ontologie pro studenty

Ontologie

Web o ontologii - GitHub - Svár - Telegram v ruštině - X - reddit

Zdroj: www.habr.com

Přidat komentář