Ako napísať smart kontrakt na Pythone v sieti Ontology. Časť 3: Runtime API

Ako napísať smart kontrakt na Pythone v sieti Ontology. Časť 3: Runtime API

Toto je 3. časť série výučbových článkov o vytváraní smart kontraktov na Pythone v blockchainovej sieti Ontology. V predchádzajúcich článkoch sme sa oboznámili s

  1. Blockchain & Block API
  2. Storage API.

Teraz, keď máte predstavu o tom, ako zavolať vhodné API pre trvalé úložisko pri vývoji smart kontraktu s pomocou Pythona v sieti Ontology, prejdime k zoznámeniu sa s tým, ako používať Runtime API (API pre vykonávanie kontraktov). Runtime API má 8 súvisiacich API, ktoré poskytujú spoločné rozhrania pre vykonávanie kontraktov a pomáhajú vývojárom získavať, transformovať a overovať údaje.

Nižšie je stručný popis týchto 8 API:

Ako napísať smart kontrakt na Pythone v sieti Ontology. Časť 3: Runtime API

Poďme sa podrobnejšie pozrieť na to, ako používať tieto 8 API. Predtým si môžete vytvoriť nový kontrakt v nástroji pre vývoj smart kontraktov Ontology SmartX a riadiť sa nižšie uvedenými pokynmi.

Ako používať Runtime API

Existujú dva spôsoby importu Runtime API: ontology.interop.System.Runtime a ontology.interop.Ontology.Runtime. Cesta Ontology obsahuje nedávno pridané API. Nižšie uvedené riadky importujú tieto API.

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

Notify API

Funkcia Notify prenáša udalosť po celej sieti. V nižšie uvedenom príklade funkcia Notify vráti hexadecimálny reťazec "hello world" a prenesie ho po celej sieti.

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

Môžete to vidieť v logoch:

Ako napísať smart kontrakt na Pythone v sieti Ontology. Časť 3: Runtime API

GetTime API

Funkcia GetTime vracia aktuálnu časovú značku, ktorá vracia Unix čas, v ktorom bola funkcia zavolaná. Jednotka merania — sekunda.

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

GetCurrentBlockHash API

Funkcia GetCurrentBlockHash vracia hash aktuálneho bloku.

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

Serialize a Deserialize

Toto je pár funkcií pre serializáciu a deserializáciu. Funkcia Serialize transformuje objekt na objekt bytearray, zatiaľ čo funkcia Deserialize pretransformuje bytearray na pôvodný objekt. Nižšie uvedený vzor kódu realizuje transformáciu prijatých parametrov a uchováva ich v trvalom úložisku kontraktu. Taktiež extrahuje údaje z trvalého úložiska kontraktu a pretransformuje ich 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

Tento pár funkcií slúži na konverziu adries. Funkcia Base58ToAddress konvertuje zakódovanú adresu base58 na adresu vo forme bytearray, zatiaľ čo AddressToBase58 konvertuje adresu vo forme bytearray na zakódovanú adresu 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

Funkcia CheckWitness(fromAcct) má dve funkcie:

  • Overiť, či je objekt volajúci aktuálnu funkciu fromAcct. Ak áno (t.j. podpis bol overený), funkcia sa vráti.
  • Skontrolovať, či je objekt volajúci aktuálnu funkciu zmluvou. Ak ide o zmluvu a funkcia sa vykonáva zo zmluvy, potom bola overenie úspešné. T.j. overiť, či fromAcct zodpovedá návratovej hodnote GetCallingScriptHash(). Funkcia GetCallingScriptHash() môže získať hodnotu hashu zmluvy aktuálnej smart zmluvy.

GetCallingScriptHash():

Viac informácií na 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

Viac informácií nájdete na Guthub. V nasledujúcom článku predstavíme Native API, aby ste sa naučili, ako prenášať aktíva v smart zmluvách Ontology.

Článok bol preložený redakciou Hashrate&Shares špeciálne pre OntologyRussia.

Ste vývojár? Pripojte sa k našej technickej komunite na Discord. Okrem toho sa pozrite na Centrum vývojárov Ontology, kde nájdete viac nástrojov, dokumentáciu a mnoho ďalšieho.

Otvorené úlohy pre vývojárov. Zatvorte úlohu - získajte odmenu.

Žiadosť o talentovú program Ontology pre študentov

Ontology

Ontology website — GitHub — Discord — Telegram Russian — Twitter — Reddit

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster