Come scrivere uno smart contract in Python sulla rete Ontology. Parte 3: Runtime API

Come scrivere uno smart contract in Python sulla rete Ontology. Parte 3: Runtime API

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

  1. Blockchain & Block API
  2. Storage API.

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:

Come scrivere uno smart contract in Python sulla rete Ontology. Parte 3: Runtime 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 SmartX 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, GetCurrentBlockHash

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

Come scrivere uno smart contract in Python sulla rete Ontology. Parte 3: Runtime API

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

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

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

Ulteriori informazioni possono essere trovate su Guthub. Nel prossimo articolo presenteremo Native API, per imparare come trasferire asset negli smart contract di Ontology.

L'articolo è stato tradotto dalla redazione Hashrate&Shares specificamente per OntologyRussia.

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

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

Invia la tua candidatura alla programma talenti Ontology per studenti

Ontology

sito web di OntologyGitHubDiscordTelegram RussoTwitter 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