ProHoster > Blog > Uprava > 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
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:
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:
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.
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.
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.
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č.