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

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

Ovo je treći deo serije obrazovnih članaka o kreiranju pametnih ugovora na Pythonu u Ontology blockchain mreži. U prethodnim člancima upoznali smo se sa

  1. Blockchain & Block API
  2. Storage API.

Sada kada imate predstavu o tome kako pozvati odgovarajući API za trajno skladište prilikom razvoja pametnog ugovora pomoću Pythona u Ontology mreži, hajde da pređemo na upoznavanje s time kako koristiti Runtime API (API za izvršenje ugovora). Runtime API ima 8 povezanih API-ja koji pružaju zajedničke interfejse za izvršavanje ugovora i pomažu programerima da dobiju, transformišu i verifikuju podatke.

Ispod je kratak opis tih 8 API-ja:

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

Hajde da detaljnije istražimo kako koristiti tih 8 API-ja. Pre toga možete kreirati novi ugovor u alatu za razvoj pametnih ugovora Ontology SmartX i pratiti dolje navedene upute.

Kako koristiti Runtime API

Postoje dva načina za uvoz Runtime API: ontology.interop.System.Runtime i ontology.interop.Ontology.Runtime. Ontology put sadrži nedavno dodane API-je. Donje linije uvoze 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 prenosi događaj širom mreže. U donjem primeru funkcija Notify će vratiti hex-string "hello word" i preneti je širom mreže.

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

Možete to videti u logovima:

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

GetTime API

Funkcija GetTime vraća trenutni vremenski žig, koji vraća Unix-vreme kada je funkcija pozvana. Jedinica mere — sekunda.

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

GetCurrentBlockHash API

Funkcija GetCurrentBlockHash vraća heš trenutnog bloka.

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

Serialize i Deserialize

Ovo su funkcije za serializaciju i deserializaciju. Funkcija Serialize pretvara objekat u objekat bytearray, dok funkcija Deserialize pretvara bytearray u prvobitni objekat. Donji uzorak koda realizuje transformaciju ulaznih parametara i čuva ih u trajnom skladištu ugovora. Takođe izvlači podatke iz trajnog skladišta ugovora i pretvara ih u prvobitni objekat.

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

Ova dva funkcije za pretvorbu adresa. Funkcija Base58ToAddress pretvara kodiranu adresu base58 u adresu u obliku bytearray, dok funkcija AddressToBase58 pretvara adresu u obliku bytearray u kodiranu 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

Funkcija CheckWitness(fromAcct) ima dvije funkcionalnosti:

  • Verificirati da li je pozivatelj trenutne funkcije objekat fromAcct. Ako jest (tj. provjera potpisa je prošla), funkcija se vraća.
  • Provjeriti da li je pozivatelj trenutne funkcije objekat kontrakt. Ako je to kontrakt i funkcija se izvodi iz kontrakta, provjera je prošla. To jest, verificirati da li fromAcct odgovara vrijednosti GetCallingScriptHash(). Funkcija GetCallingScriptHash() može uzeti vrijednost hash-a trenutnog pametnog kontrakta.

GetCallingScriptHash():

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 predstavit ćemo Native API, kako upravljati prijenosom sredstava u pametnim ugovorima Ontology.

Članak je preveden od strane Hashrate&Shares specijalno za OntologyRussia.

Jeste li programer? Pridružite se našoj tehničkoj zajednici na Discord. Također, zavirite u Centar za programere Ontology, gdje možete naći više alata, dokumentaciju i još mnogo toga.

Otvoreni zadaci za programere. Zatvori zadatak - dobij nagradu.

Prijaviti se na program za talente Ontology za studente

Ontology

Ontology web stranica — GitHub — Discord — Telegram Ruski — Twitter — Redditu

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster