Kako napisati pametno pogodbo v Pythonu v omrežju Ontology. Del 3: Runtime API

Kako napisati pametno pogodbo v Pythonu v omrežju Ontology. Del 3: Runtime API

To je 3. del serije učnih člankov o ustvarjanju pametnih pogodb v Pythonu v blockchain omrežju Ontology. V prejšnjih člankih smo se seznanili z

  1. Blockchain & Block API
  2. Storage API.

Zdaj, ko imate predstavo o tem, kako poklicati ustrezno API za trajno shranjevanje pri razvoju pametne pogodbe z Python v omrežju Ontology, preidimo k spoznavanju, kako uporabiti Runtime API (API za izvajanje pogodb). Runtime API ima 8 povezanih API-jev, ki zagotavljajo splošne vmesnike za izvajanje pogodb in pomagajo razvijalcem pridobivati, pretvarjati in preverjati podatke.

Spodaj je kratek opis teh 8 API-jev:

Kako napisati pametno pogodbo v Pythonu v omrežju Ontology. Del 3: Runtime API

Poglejmo podrobneje, kako uporabiti teh 8 API-jev. Pred tem lahko ustvarite novo pogodbo v orodju za razvoj pametnih pogodb Ontology SmartX in sledite spodnjim navodilom.

Kako uporabiti Runtime API

Obstajata dva načina za uvoz Runtime API: ontology.interop.System.Runtime in ontology.interop.Ontology.Runtime. Ontology pot vsebuje nedavno dodane API-je. Spodnje vrstice uvozijo te API-je.

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

Notify API

Funkcija Notify prenaša dogodek po celotnem omrežju. V spodnjem primeru bo funkcija Notify vrnila hex-niz 'hello world' in ga poslala po celotnem omrežju.

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

To lahko vidite v dnevnikih:

Kako napisati pametno pogodbo v Pythonu v omrežju Ontology. Del 3: Runtime API

GetTime API

Funkcija GetTime vrne trenutno oznako časa, ki vrača Unix-čas, ko je bila funkcija poklicana. Enota merjenja je— sekunda.

from ontology.interop.System.Runtime import GetTime
def demo():
    time=GetTime()
    return time # vrne uint številko

GetCurrentBlockHash API

Funkcija GetCurrentBlockHash vrne hash trenutnega bloka.

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

Serialize in Deserialize

To je par funkcij za serializacijo in deserializacijo. Funkcija Serialize pretvori objekt v objekt bytearray, funkcija Deserialize pa pretvori bytearray v prvotni objekt. Spodnji vzorec kode izvaja pretvorbo vhodnih parametrov in jih shranjuje v trajno shranjevanje pogodbe. Prav tako pridobiva podatke iz trajnega shranjevanja pogodbe in jih pretvarja v prvotni objekt.

iz ontology.interop.System.Runtime uvozimo GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
iz ontology.interop.System.Storage uvozimo Put, Get, GetContext

def Main(operacija, argumenti):
    if operacija == 'serialize_to_bytearray':
        podaci = argumenti[0]
        return serialize_to_bytearray(podaci)
    if operacija == 'deserialize_from_bytearray':
        ključ = argumenti[0]
        return deserialize_from_bytearray(ključ)
    return False


def serialize_to_bytearray(podaci):
    sc = GetContext()
    ključ = "1"
    byte_data = Serialize(podaci)
    Put(sc, ključ, byte_data)


def deserialize_from_bytearray(ključ):
    sc = GetContext()
    byte_data = Get(sc, ključ)
    podaci = Deserialize(byte_data)
    return podaci

Base58ToAddress in AddressToBase58

Ova dva funkcionalna para služe za pretvaranje adresa. Funkcija Base58ToAddress pretvara kodiranu adresu base58 u adresu u formi bytearray, dok AddressToBase58 pretvara adresu u formi bytearray u kodiranu adresu base58.

iz ontology.interop.Ontology.Runtime uvozimo Base58ToAddress, AddressToBase58
def demo():
    base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn"
    addr=Base58ToAddress(base58_addr)
    Log(addr)
    base58_addr=AddressToBase58(addr)
    Log(base58_addr)

CheckWitness

Funkcija CheckWitness(fromAcct) ima dve funkcionalnosti:

  • Verifikovati da li je objekat koji poziva trenutnu funkciju fromAcct. Ako jeste (tj. ako je prođena provera potpisa), funkcija se vraća.
  • Proveriti da li je objekat koji poziva trenutnu funkciju ugovor. Ako je ovo ugovor i funkcija se izvršava iz ugovora, tada je verifikacija prošla. To jest, verifikovati da li je fromAcct povratna vrednost GetCallingScriptHash(). Funkcija GetCallingScriptHash() može da uzme vrednost heša ugovora trenutnog pametnog ugovora.

GetCallingScriptHash():

Više informacija na Guthub

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

Više informacija može se pronaći na Guthub. U sledećem članku predstavićemo Native API, kako bi ste savladali prenos sredstava u pametnim ugovorima Ontology.

Članak je prevodila redakcija Hashrate&Shares specijalno za OntologyRussia.

Da li ste programer? Pridružite se našoj tehničkoj zajednici na Discord. Takođe, posetite Centar za programere Ontology, gde možete pronaći više alata, dokumentaciju i još mnogo toga.

Otvoreni zadaci za programere. Zatvorite zadatak — dobijte nagradu.

Prijavite se za program talenata Ontology za studente

Ontology

web stranica Ontology — GitHub — Discord — Telegram Russian — Twitter — Reddit

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster