
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. .
In questo articolo inizieremo a conoscere l'API dello smart contract Ontology. L'API dello smart contract Ontology è suddivisa in 7 moduli:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API e
- 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 , 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, GetHeaderGetHeight
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 functionGetHeader
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 headerGetTransactionByHash
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:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Per prima cosa, inverte l'hash della transazione:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Gli 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:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fDi 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 txGetTransactionHeight
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 heightGetContract
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 contractGetBlock
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 block2. 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 countGetTransactions
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 txsGetTransactionByIndex
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 txLa guida completa può essere trovata sul nostro .
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.
Sei uno sviluppatore? Unisciti alla nostra comunità tecnica su . Inoltre, dai un'occhiata al sul nostro sito, dove puoi trovare strumenti per sviluppatori, documentazione e molto altro.
Ontology
- /
- Telegram /
- /
Fonte: habr.com
