ProHoster > blog > amministrazione > Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 3: API di runtime
Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 3: API di runtime
Questa è la terza parte di una serie di articoli didattici sulla creazione di contratti intelligenti in Python sulla rete blockchain Ontology. Negli articoli precedenti abbiamo fatto conoscenza
Ora che hai un'idea di come chiamare l'API di archiviazione persistente appropriata quando sviluppi un contratto intelligente utilizzando Python sulla rete Ontology, passiamo a imparare come utilizzare API di runtime (API di esecuzione del contratto). L'API Runtime dispone di 8 API correlate che forniscono interfacce comuni per l'esecuzione del contratto e aiutano gli sviluppatori a recuperare, trasformare e convalidare i dati.
Di seguito una breve descrizione degli 8 dati API:
Diamo uno sguardo più da vicino a come utilizzare i dati 8 API. Prima di ciò, puoi creare un nuovo contratto nello strumento di sviluppo del contratto intelligente Ontology SmartX e seguire le istruzioni riportate di seguito.
Come utilizzare l'API Runtime
Esistono due modi per importare API di runtime: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. Il percorso Ontology contiene le API appena aggiunte. Le righe seguenti importano i dati API.
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
Notifica API
La funzione Notifica trasmette l'evento su tutta la rete. Nell'esempio seguente, la funzione Notifica restituirà la stringa esadecimale "ciao parola" e la trasmetterà in tutta la rete.
from ontology.interop.System.Runtime import Notify
def demo():
Notify("hello world")
Puoi vederlo nei log:
API GetTime
La funzione GetTime restituisce il timestamp corrente, che restituisce l'ora Unix in cui è stata chiamata la funzione. L'unità di misura è la seconda.
from ontology.interop.System.Runtime import GetTime
def demo():
time=GetTime()
return time # return a uint num
API GetCurrentBlockHash
La funzione GetCurrentBlockHash restituisce l'hash del blocco corrente.
Si tratta di una coppia di funzioni di serializzazione e deserializzazione. La funzione Serialize converte un oggetto in un oggetto bytearray e la funzione Deserialize converte un bytearray nell'oggetto originale. L'esempio di codice seguente converte i parametri in ingresso e li archivia nell'archivio persistente del contratto. Recupera inoltre i dati dalla memoria persistente 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 data
Base58ToAddress e IndirizzoToBase58
Questa coppia di funzioni di traduzione degli indirizzi. La funzione Base58ToAddress converte un indirizzo codificato base58 in un indirizzo di matrice di byte e AddressToBase58 converte un indirizzo di matrice di byte in un indirizzo codificato di base58.
La funzione CheckWitness(fromAcct) ha due funzionalità:
Verificare se il chiamante della funzione corrente è fromAcct. Se sì (ovvero, la verifica della firma è stata superata), la funzione restituisce.
Controlla se l'oggetto che chiama la funzione corrente è un contratto. Se si tratta di un contratto e la funzione viene eseguita dal contratto, la verifica viene superata. Cioè, verifica se fromAcct è il valore restituito di GetCallingScriptHash(). La funzione GetCallingScriptHash() può assumere il valore hash del contratto dello smart contract corrente.
from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return res
Maggiori informazioni possono essere trovate su Gutub. Nel prossimo articolo lo presenteremo API nativaper imparare come trasferire risorse nei contratti intelligenti di Ontology.
L'articolo è stato tradotto dalla redazione Hashrate e condivisioni soprattutto per OntologyRussia.
Sei uno sviluppatore? Unisciti alla nostra comunità tecnologica su Discordia. Inoltre, dai un'occhiata a Centro per sviluppatori Ontology, puoi trovare più strumenti, documentazione e molto altro lì.