Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 1: Blockchain e API di blocco

Come scrivere un contratto intelligente in Python sulla rete Ontology. Parte 1: Blockchain e API di blocco

Questa è la prima parte di una serie di articoli didattici sulla creazione di contratti intelligenti in Python sulla rete blockchain Ontology utilizzando lo strumento di sviluppo di contratti intelligenti SmartX.

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

  1. Blockchain e API di blocco,
  2. API di esecuzione,
  3. API di archiviazione,
  4. API nativa,
  5. Aggiorna l'API,
  6. API del motore di esecuzione e
  7. API di chiamata statica e dinamica.

Blockchain e Block API sono la parte principale del sistema di contratto intelligente Ontology. L'API Blockchain supporta operazioni di query di base sulla blockchain, come ottenere l'altezza corrente di un blocco, mentre l'API Block supporta operazioni di query di blocco di base, come interrogare il numero di transazioni per un determinato blocco.

Iniziamo!

Per iniziare, crea un nuovo contratto in SmartX, quindi seguire le istruzioni riportate di seguito.

1. Come utilizzare l'API Blockchain

I collegamenti alle funzioni del contratto intelligente sono identici ai collegamenti Python. È possibile inserire le funzioni corrispondenti secondo necessità. Ad esempio, la seguente istruzione introduce GetHeight, una funzione per ottenere l'altezza corrente di un blocco, e GetHeader, una funzione per ottenere il titolo del blocco.

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

Ottienialtezza

GetHeight viene utilizzato per ottenere l'ultimo numero di sequenza del blocco nella blockchain, come mostrato nell'esempio seguente. Nell'ultimo esempio, per comodità, salteremo la funzione Main, ma potrete 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 utilizzato per ottenere l'intestazione del blocco; il parametro è il numero seriale 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

OttieniTransactionByHash

GetTransactionByHash viene utilizzato per recuperare una transazione utilizzando un hash della transazione. L'hash della transazione viene inviato OttieniTransactionByHash come parametri in formato bytearray. La chiave di questa funzione è convertire l'hash della transazione in formato esadecimale nell'hash della transazione in formato bytearray. Questo è un passo importante. Altrimenti riceverai un errore che indica che non esiste alcun blocco con quell'hash del blocco. Prendiamo come esempio l'hash della transazione in formato esadecimale per convertirlo nel formato bytearray. L'esempio è simile al seguente:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Innanzitutto invertire l'hash della transazione:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Gli sviluppatori possono eseguire questo passaggio utilizzando lo strumento di conversione del numero esadecimale (little endian) fornito da SmartX.

Quindi converti il ​​risultato risultante 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, converti il ​​bytearray risultante in una stringa come questa:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Di seguito è riportato un esempio della funzione GetTransactionByHash, che accetta una transazione in base all'hash della transazione:

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

Ottieni altezza transazione

GetTransactionHeight viene utilizzato per ottenere l'altezza della transazione utilizzando l'hash della transazione. 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

Ottieni contratto

Gli sviluppatori possono utilizzare la funzione GetContract per recuperare un contratto tramite un hash del contratto. Il processo di conversione dell'hash del contratto è lo stesso del 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

OttieniBlocco

GetBlock viene utilizzato per ottenere un blocco. Esistono due modi per ottenere un blocco specifico.

1. Ottieni un blocco per altezza del blocco:

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

2. Ottieni un hash blocco per blocco:

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: Ottieni transazioni, Ottieni il conteggio delle transazioniE OttieniTransazionePerIndice. Li sistemeremo uno per uno.

Ottieni il conteggio delle transazioni

GetTransactionCount viene utilizzato per ottenere il numero di transazioni per un determinato 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

Ottieni transazioni

Gli sviluppatori possono utilizzare la funzione GetTransactions per recuperare tutte le transazioni in un determinato 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

OttieniTransazionePerIndice

GetTransactionByIndex viene utilizzato per recuperare una transazione specifica in un determinato blocco.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # index starts from 0.
    return tx

Una guida completa la potete trovare sul ns GitHub.

postfazione

Blockchain e Block API sono una parte indispensabile dei contratti intelligenti perché puoi utilizzarla per interrogare i dati blockchain e bloccare i dati nei contratti intelligenti. Nei prossimi articoli discuteremo come utilizzare le API rimanenti e capiremo come interagiscono con la blockchain di Ontology.

L'articolo è stato tradotto dalla redazione di Hashrate&Shares appositamente per OntologyRussia. клик

Sei uno sviluppatore? Unisciti alla nostra comunità tecnologica su Discordia. Inoltre, dai un'occhiata a Centro per sviluppatori sul nostro sito Web, dove puoi trovare strumenti per sviluppatori, documentazione e altro ancora.

ontologia

Fonte: habr.com

Aggiungi un commento