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

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

To je 3. del v seriji izobraževalnih člankov o ustvarjanju pametnih pogodb v Pythonu v omrežju veriženja blokov Ontology. V prejšnjih člankih smo se seznanili z

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

Zdaj, ko imate idejo o tem, kako poklicati ustrezen API za trajno shranjevanje, ko razvijate pametno pogodbo z uporabo Pythona v omrežju Ontology, pojdimo k učenju uporabe Runtime API (API za izvajanje pogodbe). Runtime API ima 8 povezanih API-jev, ki zagotavljajo skupne vmesnike za izvajanje pogodbe in pomagajo razvijalcem pri pridobivanju, preoblikovanju in preverjanju podatkov.

Spodaj je kratek opis podatkov 8 API:

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

Oglejmo si podrobneje, kako uporabljati podatke 8 API. Pred tem lahko ustvarite novo pogodbo v orodju za razvoj pametnih pogodb Ontology SmartX in sledite spodnjim navodilom.

Kako uporabljati Runtime API

Obstajata dva načina za uvoz Runtime API: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Pot ontologije vsebuje na novo dodane API-je. Spodnje vrstice uvozijo podatke API-ja.

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 oddaja dogodek po celotnem omrežju. V spodnjem primeru bo funkcija Notify vrnila šestnajstiški niz »hello word« in ga oddala 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. 3. del: Runtime API

GetTime API

Funkcija GetTime vrne trenutni časovni žig, ki vrne čas Unix, ob katerem je bila funkcija poklicana. Merska enota je sekunda.

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

GetCurrentBlockHash API

Funkcija GetCurrentBlockHash vrne zgoščeno vrednost trenutnega bloka.

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

Serializiraj in deserializiraj

To je par serializacijskih in deserializacijskih funkcij. Funkcija Serialize pretvori objekt v objekt bytearray, funkcija Deserialize pa pretvori bytearray v izvirni objekt. Spodnji vzorec kode pretvori dohodne parametre in jih shrani v trajni pomnilnik pogodbe. Prav tako pridobi podatke iz trajnega pomnilnika pogodbe in jih pretvori v izvirni predmet.

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 in AddressToBase58

Ta par funkcij prevajanja naslovov. Funkcija Base58ToAddress pretvori naslov, kodiran base58, v naslov niza bytearray, AddressToBase58 pa naslov niza bytearray v naslov, kodiran z 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)

Preverite pričo

Funkcija CheckWitness(fromAcct) ima dve funkciji:

  • Preverite, ali je klicatelj trenutne funkcije fromAcct. Če je odgovor pritrdilen (tj. preverjanje podpisa uspešno), se funkcija vrne.
  • Preverite, ali je objekt, ki kliče trenutno funkcijo, pogodba. Če gre za pogodbo in se funkcija izvaja iz pogodbe, potem je preverjanje uspešno. To pomeni, preverite, ali je fromAcct vrnjena vrednost GetCallingScriptHash(). Funkcija GetCallingScriptHash() lahko prevzame zgoščeno vrednost pogodbe trenutne pametne pogodbe.

GetCallingScriptHash():

Preberite več 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

Več informacij najdete na Guthub. V naslednjem članku bomo predstavili Izvorni APIče želite izvedeti, kako prenesti sredstva v pametnih pogodbah Ontology.

Članek je prevedel urednik Hashrate & Shares posebej za OntologyRussia.

Ste razvijalec? Pridružite se naši tehnični skupnosti na Razpad. Oglejte si tudi Center za razvijalce Ontologija, tam lahko najdete več orodij, dokumentacije in še veliko več.

Odprte naloge za razvijalce. Izpolnite nalogo in prejmite nagrado.

Prijavite se za program Ontology talent za študente

Ontologija

Ontološka spletna stran - GitHub - Razpad - Telegram ruski - Twitter - Reddit

Vir: www.habr.com

Dodaj komentar