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 seriji edukativnih članaka o stvaranju pametnih ugovora u Pythonu na Ontology blockchain mreži. U prethodnim člancima s kojima 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 mreži Ontology, prijeđimo na učenje kako koristiti Runtime API (API za izvršenje ugovora). Runtime API ima 8 povezanih API-ja koji pružaju zajednička sučelja za izvršenje ugovora i pomažu razvojnim programerima da dohvate, transformiraju 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 pobliže kako koristiti 8 API podatke. Prije toga možete izraditi novi ugovor u alatu za razvoj pametnih ugovora Ontology pametne iskaznice SmartX i slijedite upute u nastavku.

Kako koristiti Runtime API

Postoje dva načina uvoza Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Ontološki put sadrži novo dodane API-je. Donji redovi 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 Notify emitira događaj kroz cijelu mrežu. U donjem primjeru, funkcija Notify vratit će heksadecimalni niz "hello word" i emitirati ga diljem mreže.

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

Ovo možete vidjeti u zapisima:

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. Mjerna jedinica 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 trenutačnog bloka.

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

Serijalizacija i deserijalizacija

Ovo je par funkcija serijalizacije i deserijalizacije. Funkcija Serialize pretvara objekt u objekt bytearray, a funkcija Deserialize pretvara niz bytearray u izvorni objekt. Uzorak koda u nastavku pretvara dolazne parametre i pohranjuje ih u trajnu pohranu ugovora. Također dohvaća podatke iz trajne pohrane ugovora i pretvara ih u izvorni 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 pretvara adresu kodiranu base58 u adresu niza bytearray, a AddressToBase58 adresu niza bytearray 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 da (tj. 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. Odnosno, provjerite je li fromAcct povratna vrijednost GetCallingScriptHash(). Funkcija GetCallingScriptHash() može uzeti hash 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 predstavit ćemo Native APInaučiti kako prenijeti sredstva u pametnim ugovorima Ontology.

Članak su preveli urednici Hashrate&Share posebno za OntologyRussia.

Jeste li programer? Pridružite se našoj tehnološkoj zajednici na Nesloga. Također, pogledajte Centar za razvojne programere Ontologija, tamo možete pronaći više alata, dokumentacije i još mnogo toga.

Otvoreni zadaci za programere. Izvršite zadatak i osvojite nagradu.

Primijeni za ontološki talent program za studente

Ontologija

Ontološka web stranica - GitHub - Nesloga - Telegram ruski - X / Twitter - Reddit

Izvor: www.habr.com

Dodajte komentar