
Questa è la terza parte di una serie di articoli didattici sulla creazione di smart contract in Python nella rete blockchain Ontology. Negli articoli precedenti, abbiamo esplorato
- .
Ora che hai un'idea di come chiamare l'API appropriata per lo storage permanente durante lo sviluppo di uno smart contract in Python nella rete Ontology, passiamo a come utilizzare API di Runtime (Contract Execution API). L'API Runtime ha 8 API correlate che forniscono interfacce generali per l'esecuzione dei contratti e aiutano gli sviluppatori a ottenere, trasformare e verificare i dati.
Ecco una breve descrizione di queste 8 API:

Esploriamo più nel dettaglio come utilizzare queste 8 API. Prima di tutto, puoi creare un nuovo contratto nello strumento di sviluppo degli smart contract di Ontology e seguire le istruzioni qui sotto.
Come utilizzare l'API Runtime
Ci sono due modi per importare API Runtime: ontology.interop.System.Runtime e ontology.interop.Ontology.Runtime. Il percorso Ontology contiene API recentemente aggiunte. Le seguenti righe 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 in tutta la rete. Nel seguente esempio, la funzione Notify restituirà la stringa hex "hello world" e la trasmetterà in tutta la rete.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")Puoi verificarlo nei log:

GetTime API
La funzione GetTime restituisce il timestamp attuale, che restituisce il tempo Unix in cui la funzione è stata chiamata. 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 due funzioni di serializzazione e deserializzazione. La funzione Serialize converte un oggetto in un oggetto bytearray, mentre la funzione Deserialize converte il bytearray nell'oggetto originale. Il seguente campione di codice effettua 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.
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 dataBase58ToAddress e AddressToBase58
Queste sono due funzioni per la conversione degli indirizzi. La funzione Base58ToAddress converte un indirizzo codificato in base58 in un indirizzo in forma di bytearray, mentre AddressToBase58 converte un indirizzo in forma di bytearray in un indirizzo codificato in 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
La funzione CheckWitness(fromAcct) ha due funzionalità:
- Verificare se l'oggetto che chiama la funzione corrente è fromAcct. Se sì (cioè, se il controllo della firma è passato), la funzione restituisce.
- Controllare se l'oggetto che chiama la funzione corrente è un contratto. Se è un contratto e la funzione è eseguita da un contratto, allora la verifica è passata. Cioè, verificare se fromAcct è il valore restituito da GetCallingScriptHash(). La funzione GetCallingScriptHash() può dare il valore hash del contratto dello smart contract corrente.
GetCallingScriptHash():
Approfondisci su
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return resUlteriori informazioni possono essere trovate su . Nel prossimo articolo presenteremo Native API, per imparare come trasferire asset negli smart contract di Ontology.
L'articolo è stato tradotto dalla redazione specificamente per OntologyRussia.
Sei uno sviluppatore? Unisciti alla nostra comunità tecnica su . Inoltre, dai un'occhiata a Ontology, dove puoi trovare più strumenti, documentazione e molto altro.
Chiudi il compito — ricevi una ricompensa.
alla programma talenti Ontology per studenti
Ontology
— — — — —
Fonte: habr.com
