Kako napisati pametni ugovor u Pythonu na mreži Ontology. Dio 3: Runtime API

Kako napisati pametni ugovor u Pythonu na mreži Ontology. Dio 3: Runtime API

Ovo je treći dio u nizu edukativnih članaka o kreiranju pametnih ugovora u Pythonu na Ontology blockchain mreži. U prethodnim člancima smo se upoznali

  1. Blockchain & Block API
  2. API za pohranu.

Sada kada imate ideju kako pozvati odgovarajući API za trajnu pohranu kada razvijate pametni ugovor koristeći Python na Ontology mreži, prijeđimo na učenje kako koristiti Runtime API (API za izvršenje ugovora). Runtime API ima 8 povezanih API-ja koji pružaju uobičajena sučelja za izvršenje ugovora i pomažu programerima da dohvate, transformišu i provjere podatke.

Ispod je kratak opis 8 API podataka:

Kako napisati pametni ugovor u Pythonu na mreži Ontology. Dio 3: Runtime API

Pogledajmo bliže kako koristiti 8 API podatke. Prije toga, možete kreirati novi ugovor u alatu za razvoj pametnih ugovora Ontology SmartX i slijedite upute u nastavku.

Kako koristiti Runtime API

Postoje dva načina za uvoz Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ontološka staza sadrži novo dodane API-je. Redovi ispod uvoze API podatke.

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

Obavijesti API

Funkcija Obavijesti emituje događaj u cijeloj mreži. U primjeru ispod, funkcija Notify će vratiti heksadecimalni niz "zdravo riječ" i emitirati ga širom mreže.

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

Ovo možete vidjeti u logovima:

Kako napisati pametni ugovor u Pythonu na mreži Ontology. Dio 3: Runtime API

GetTime API

Funkcija GetTime vraća trenutnu vremensku oznaku, koja vraća Unix vrijeme u kojem je funkcija pozvana. Jedinica mjerenja je sekunda.

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

GetCurrentBlockHash API

Funkcija GetCurrentBlockHash vraća hash trenutnog bloka.

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

Serialize i Deserialize

Ovo je par funkcija za serijalizaciju i deserializaciju. Funkcija Serialize konvertuje objekat u bajt niz objekat, a funkcija Deserialize konvertuje niz bajtova u originalni objekat. Uzorak koda u nastavku pretvara dolazne parametre i pohranjuje ih u trajno skladište ugovora. Također preuzima podatke iz trajne memorije ugovora i pretvara ih u originalni 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 i AddressToBase58

Ovaj par funkcija prevođenja adresa. Funkcija Base58ToAddress konvertuje base58 kodiranu adresu u adresu niza bajtova, a AddressToBase58 konvertuje adresu niza bajtova u adresu kodiranu 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)

Provjerite svjedoka

Funkcija CheckWitness(fromAcct) ima dvije funkcije:

  • Provjerite je li pozivatelj trenutne funkcije fromAcct. Ako je odgovor da (to jest, provjera potpisa je prošla), funkcija se vraća.
  • Provjerite je li objekt koji poziva trenutnu funkciju ugovor. Ako se radi o ugovoru i funkcija se izvršava iz ugovora, onda je provjera prošla. To jest, provjerite je li fromAcct povratna vrijednost GetCallingScriptHash(). Funkcija GetCallingScriptHash() može uzeti heš vrijednost ugovora trenutnog pametnog ugovora.

GetCallingScriptHash():

Pročitajte više 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

Više informacija možete pronaći na Guthub. U sljedećem članku ćemo se predstaviti Native APIda naučite kako prenijeti sredstva u Ontology pametnim ugovorima.

Članak je preveden od strane uredništva Hashrate&Shares posebno za OntologyRussia.

Jeste li programer? Pridružite se našoj tehničkoj zajednici na Diskord. Takođe, pogledajte Centar za programere Ontologija za više alata, dokumentacije i još mnogo toga.

Otvoreni zadaci za programere. Zatvorite zadatak - osvojite nagradu.

Prijavite se za program Ontology talent za studente

ontologija

Ontološka web stranica - GitHub - Diskord - Telegram ruski - cvrkut - Reddit

izvor: www.habr.com

Dodajte komentar