
Questa è la 3ª parte di una serie di articoli formativi sulla creazione di smart contract in Python nella rete blockchain Ontology. Negli articoli precedenti abbiamo fatto conoscenza con
- .
Ora che avete un'idea di come chiamare l'API appropriata per lo storage permanente durante lo sviluppo di uno smart contract con Python nella rete Ontology, passiamo a vedere come utilizzare Runtime API (Contract Execution API). La Runtime API ha 8 API correlate che forniscono interfacce generali per l'esecuzione del contratto e aiutano gli sviluppatori a acquisire, trasformare e verificare i dati.
Di seguito una breve descrizione di queste 8 API:

Esaminiamo più in dettaglio come utilizzare queste 8 API. Prima di questo potete creare un nuovo contratto nello strumento di sviluppo degli smart contract di Ontology e seguire le istruzioni sottostanti.
Come utilizzare la Runtime API
Ci sono due modi per importare Runtime API: ontology.interop.System.Runtime e ontology.interop.Ontology.Runtime. Il percorso Ontology include le API recentemente aggiunte. Le righe sottostanti importano queste API.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHashNotify API
La funzione Notify trasmette un evento attraverso la rete. Nell'esempio seguente, la funzione Notify restituirà una stringa esadecimale “hello world” e la trasmetterà per tutta la rete.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")Potete vedere questo nei log:

GetTime API
La funzione GetTime restituisce il timestamp attuale, che restituisce il tempo Unix in cui è stata chiamata la funzione. L'unità di misura è il secondo.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint numGetCurrentBlockHash API
La funzione GetCurrentBlockHash restituisce l'hash dell'attuale blocco.
from ontology.interop.Ontology.Runtime import GetCurrentBlockHash
def demo():
block_hash = GetCurrentBlockHash()
return block_hashSerialize e Deserialize
Queste sono una coppia di funzioni di serializzazione e deserializzazione. La funzione Serialize trasforma un oggetto in un oggetto bytearray, mentre la funzione Deserialize trasforma un bytearray nell'oggetto originale. Il campione di codice seguente esegue la trasformazione dei parametri in ingresso e li memorizza nello storage permanente del contratto. Estrae anche i dati dallo storage permanente del contratto e li trasforma nell'oggetto originale.
da ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
da 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 dataBase58ToAddress e AddressToBase58
Questa coppia di funzioni converte gli indirizzi. La funzione Base58ToAddress converte un indirizzo codificato in base58 in un indirizzo in formato bytearray, mentre AddressToBase58 converte un indirizzo in formato bytearray in un indirizzo codificato in base58.
da 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
La funzione CheckWitness(fromAcct) ha due funzionalità:
- Verificare se l'oggetto chiamante della funzione corrente è fromAcct. Se sì (cioè il controllo della firma è superato), la funzione restituisce.
- Controllare se l'oggetto chiamante della funzione corrente è un contratto. Se è un contratto e la funzione è eseguita da un contratto, allora la verifica è superata. Cioè, verificare se fromAcct è il valore restituito da GetCallingScriptHash(). La funzione GetCallingScriptHash() può prendere il valore dell'hash del contratto dell'attuale smart contract.
GetCallingScriptHash():
Ulteriori dettagli su
da ontology.interop.System.Runtime import CheckWitness
da ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return resMaggiori informazioni possono essere trovate su . Nel prossimo articolo presenteremo API Native, per apprendere come trasferire attivi negli smart contract Ontology.
L'articolo è stato tradotto dall'editorial staff di specialmente per OntologyRussia.
Sei uno sviluppatore? Unisciti alla nostra comunità tecnica su . Inoltre, dai un'occhiata al Ontology, dove puoi trovare ulteriori strumenti, documentazione e molto altro.
Chiudi il compito — ricevi una ricompensa.
al programma talenti Ontology per studenti
Ontology
— — — — —
Fonte: habr.com
