Come scrivere un contratto intelligente in Python nella rete Ontology. Parte 3: Runtime API

Come scrivere un contratto intelligente in Python nella rete Ontology. Parte 3: Runtime API

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

  1. Blockchain & Block API
  2. Storage API.

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:

Come scrivere un contratto intelligente in Python nella rete Ontology. Parte 3: Runtime 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 SmartX 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, GetCurrentBlockHash

Notify 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:

Come scrivere un contratto intelligente in Python nella rete Ontology. Parte 3: Runtime API

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 num

GetCurrentBlockHash API

La funzione GetCurrentBlockHash restituisce l'hash dell'attuale blocco.

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

Serialize 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 data

Base58ToAddress 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 Guthub

da ontology.interop.System.Runtime import CheckWitness
da ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

Maggiori informazioni possono essere trovate su Guthub. Nel prossimo articolo presenteremo API Native, per apprendere come trasferire attivi negli smart contract Ontology.

L'articolo è stato tradotto dall'editorial staff di Hashrate&Shares specialmente per OntologyRussia.

Sei uno sviluppatore? Unisciti alla nostra comunità tecnica su Discord. Inoltre, dai un'occhiata al Centro sviluppatori Ontology, dove puoi trovare ulteriori strumenti, documentazione e molto altro.

Compiti aperti per gli sviluppatori. Chiudi il compito — ricevi una ricompensa.

Invia una candidatura al programma talenti Ontology per studenti

Ontology

sito web di Ontology — GitHub — Discord — Telegram Russo — Twitter — Reddit

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster