Come scrivere uno smart contract in Python sulla rete Ontology. Parte 1: Blockchain & Block API

Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 1: API Blockchain & Block

Questo è il primo articolo di una serie di articoli formativi sulla creazione di smart contract in Python nella rete blockchain Ontology con l'ausilio dello strumento di sviluppo per smart contract. SmartX.

In questo articolo inizieremo a conoscere l'API dello smart contract Ontology. L'API dello smart contract Ontology è suddivisa in 7 moduli:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API e
  7. Static & Dynamic Call API.

Blockchain & Block API è la parte fondamentale del sistema degli smart contract Ontology. L'API Blockchain supporta le operazioni di base delle richieste blockchain, come, ad esempio, il recupero dell'attuale altezza del blocco, mentre l'API Block supporta le operazioni di base delle richieste sui blocchi, come, ad esempio, il conteggio delle transazioni per un determinato blocco.

Iniziamo!

Per prima cosa, crea un nuovo contratto in SmartX, e poi segui le istruzioni qui sotto.

1. Come usare l'API Blockchain

I link alle funzioni degli smart contract sono identici ai link di Python. Puoi inserire le funzioni appropriate secondo necessità. Ad esempio, la seguente istruzione introduce GetHeight— la funzione per recuperare l'attuale altezza del blocco, e GetHeader— la funzione per ottenere l'intestazione del blocco.

from ontology.interop.System.Blockchain import GetHeight, GetHeader

GetHeight

GetHeight viene utilizzata per ottenere l'ultimo numero sequenziale del blocco nella blockchain, come mostrato nell'esempio sottostante. Nell'ultimo esempio, per comodità, salteremo la funzione Main, ma puoi aggiungerla se necessario.

from ontology.interop.System.Runtime import Notify
from ontology.interop.System.Blockchain import GetHeight
def Main(operation):
    if operation == 'demo':
        return demo()
    return False

def demo():
    height=GetHeight()
    Notify(height) # print height
    return height #return height after running the function

GetHeader

GetHeader viene utilizzata per ottenere l'intestazione del blocco, il parametro è il numero sequenziale del blocco nella blockchain. Esempio:

from ontology.interop.System.Runtime import Notify
from ontology.interop.System.Blockchain import GetHeader
def demo():
    block_height=10
    header=GetHeader(block_height)
    Notify(header)
return header

GetTransactionByHash

GetTransactionByHash viene utilizzata per recuperare una transazione tramite l'hash delle transazioni. L'hash della transazione viene inviato in GetTransactionByHash come parametri nel formato bytearray. La chiave di questa funzione è convertire l'hash della transazione dal formato hex all'hash della transazione in formato bytearray. Questo è un passaggio importante. Altrimenti, riceveresti un errore che indica che non esiste un blocco con tale hash. Prendiamo l'hash della transazione in formato hex come esempio per convertirlo in formato bytearray. L'esempio è il seguente:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Per prima cosa, inverte l'hash della transazione:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Gli sviluppatori possono effettuare questo passaggio utilizzando lo strumento di conversione Hex Number (little endian) Number fornito da SmartX.

Poi, trasforma il risultato ottenuto nel formato bytearray:

{0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f}

Questo può essere fatto utilizzando lo strumento di conversione String Byte Array fornito da SmartX. Infine, trasforma il bytearray risultante in una stringa simile:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Di seguito è riportato un esempio della funzione GetTransactionByHash, che recupera una transazione tramite il suo hash:

from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
    # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    tx=GetTransactionByHash(tx_hash)
    return tx

GetTransactionHeight

GetTransactionHeight viene utilizzato per ottenere l'altezza di una transazione tramite il suo hash. Prendiamo l'hash dall'esempio sopra:

from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
    #   tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    height=GetTransactionHeight(tx_hash)
    return height

GetContract

Gli sviluppatori possono utilizzare la funzione GetContract per ottenere un contratto tramite il suo hash. Il processo di conversione dell'hash del contratto è simile al processo di conversione dell'hash della transazione menzionato sopra.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

GetBlock

GetBlock viene utilizzato per ottenere un blocco. Ci sono due modi per ottenere un blocco specifico.

1. Ottenere il blocco per altezza:

from ontology.interop.System.Blockchain import GetBlock
def demo():
    block=GetBlock(1408)
    return block

2. Ottenere il blocco tramite hash:

from ontology.interop.System.Blockchain import GetBlock
def demo():
    block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
    block=GetBlock(block_hash)

2. Come utilizzare l'API Block

Ci sono tre funzioni disponibili nell'API Block: GetTransactions, GetTransactionCount, e GetTransactionByIndex. Le analizzeremo una per una.

GetTransactionCount

GetTransactionCount viene utilizzato per ottenere il numero di transazioni per un dato blocco.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
    block=GetBlock(1408)
    count=GetTransactionCount(block)
    return count

GetTransactions

Gli sviluppatori possono utilizzare la funzione GetTransactions per ottenere tutte le transazioni in questo blocco.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions 
def demo():
    block=GetBlock(1408)
    txs=GetTransactions(block)
    return txs

GetTransactionByIndex

GetTransactionByIndex viene utilizzato per ottenere una specifica transazione in questo blocco.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # l'indice inizia da 0.
    return tx

La guida completa può essere trovata sul nostro GitHub.

Postfazione

L'API Blockchain & Block è una parte indispensabile dei contratti intelligenti, poiché puoi utilizzarli per richiedere dati blockchain e dati di blocco all'interno dei contratti intelligenti. Negli articoli successivi discuteremo di come utilizzare le restanti API e scopriremo le loro interazioni con la blockchain di Ontology.

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

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

Ontology

Fonte: habr.com

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