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

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

Toto je třetí část ze série vzdělávacích článků o vytváření smart kontraktů v Pythonu v blockchainové síti Ontology. V předchozích článcích jsme se seznámili s

  1. Blockchain & Block API
  2. Storage API.

Nyní, když máte představu o tom, jak zavolat vhodné API pro trvalé úložiště při vývoji smart kontraktu pomocí Pythonu v síti Ontology, přejděme k tomu, jak využít Runtime API (API pro provádění kontraktu). Runtime API má 8 souvisejících API, která poskytují obecné rozhraní pro provádění kontraktu a pomáhají vývojářům získávat, převádět a ověřovat data.

Níže je stručný popis těchto 8 API:

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

Podívejme se podrobněji, jak používat těchto 8 API. Než začneme, můžete vytvořit nový kontrakt v nástroji pro vývoj smart kontraktů Ontology SmartX a řídit se níže uvedenými pokyny.

Jak používat Runtime API

Existují dvě cesty pro importování Runtime API: ontology.interop.System.Runtime a ontology.interop.Ontology.Runtime. Cesta Ontology obsahuje nedávno přidaná API. Následující řádky importují tato API.

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

Notify API

Funkce Notify přenáší událost po celé síti. V následujícím příkladu funkce Notify vrátí hexadecimální řetězec "hello world" a předá ho po celé síti.

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

Můžete to vidět v logách:

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

GetTime API

Funkce GetTime vrací aktuální časovou značku, která vrací Unix-čas, kdy byla funkce vyvolána. Jednotka měření— sekunda.

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

Serialize a Deserialize

To jsou dva funkce pro serializaci a deserializaci. Funkce Serialize převádí objekt na objekt bytearray, zatímco funkce Deserialize převádí bytearray na původní objekt. Následující ukázka kódu provádí převod vstupních parametrů a ukládá je do trvalého úložiště kontraktu. Také získává data z trvalého úložiště kontraktu a převádí je zpět na původní objekt.

z ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
z 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í slouží k převodu adres. Funkce Base58ToAddress převádí zakódovanou adresu base58 na adresu ve formátu bytearray, zatímco AddressToBase58 převádí adresu ve formátu bytearray na zakódovanou adresu base58.

z 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

Funkce CheckWitness(fromAcct) má dvě funkce:

  • Ověřit, zda je volající této funkce objekt fromAcct. Pokud ano (tedy pokud byla ověřena podpis), funkce vrátí hodnotu.
  • Ověřit, zda je volající této funkce objekt kontrakt. Pokud je to kontrakt a funkce je volána z kontraktu, pak byla verifikace úspěšná. To znamená, ověřit, zda fromAcct odpovídá hodnotě vrácené funkcí GetCallingScriptHash(). Funkce GetCallingScriptHash() může vrátit hash aktuálního smart kontraktu.

GetCallingScriptHash():

Více na Guthub

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

Více informací lze nalézt na Guthub. V následujícím článku představíme Native API, abychom se naučili, jak převádět aktiva v smart kontraktech Ontology.

Článek přeložila redakce Hashrate&Shares speciálně pro OntologyRussia.

Jste vývojář? Připojte se k naší technické komunitě na Discord. Navíc se podívejte na Centrum pro vývojáře Ontology, kde můžete najít více nástrojů, dokumentaci a další informace.

Otevřené úkoly pro vývojáře. Uzavři úkol — získej odměnu.

Odeslat žádost do programu talentů Ontology pro studenty

Ontology

webová stránka Ontology — GitHub — Discord — Telegram Russian — Twitter — Reddit

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster