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

  1. Blockchain e API di blocco
  2. API di archiviazione.

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:

Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 3: API di runtime

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:

Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 3: API di runtime

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.

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

Serializzare e deserializzare

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.

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)

Controlla testimone

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.

GetCallingScriptHash():

Più su Gutub

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ì.

Attività aperte per gli sviluppatori. Completa l'attività e ottieni una ricompensa.

applicare per il programma di talenti Ontology per gli studenti

ontologia

Sito web di ontologia - GitHub - Discordia - Telegramma russo - Twitter - Reddit

Fonte: habr.com

Aggiungi un commento