
Questa è la prima parte di una serie di articoli formativi sulla creazione di smart contract in Python sulla rete blockchain Ontology utilizzando lo strumento di sviluppo dei contratti intelligenti. .
In questo articolo inizieremo a conoscere l'API del contratto intelligente di Ontology. L'API del contratto intelligente di 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 di Ontology. L'API Blockchain supporta le operazioni di base delle richieste blockchain, come il recupero dell'altezza corrente del blocco, mentre l'API Block supporta le operazioni di base delle richieste ai blocchi, come la richiesta del numero di transazioni per un determinato blocco.
Iniziamo!
Per prima cosa, crea un nuovo contratto in , e poi segui le istruzioni riportate qui sotto.
1. Come utilizzare Blockchain API
I riferimenti alle funzioni dei contratti intelligenti sono identici a quelli di Python. Puoi invocare le funzioni corrispondenti secondo necessità. Ad esempio, l'istruzione sottostante invoca GetHeight— la funzione per ottenere l'altezza corrente del blocco, e GetHeader— la funzione per ottenere l'intestazione del blocco.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight viene utilizzato per ottenere il numero di blocco più recente 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 utilizzato per ottenere l'intestazione del blocco, dove l'argomento è il numero di 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 utilizzato per ottenere una transazione tramite il suo hash. L'hash della transazione viene inviato a GetTransactionByHash come parametri in formato bytearray. La chiave per questa funzione è convertire l'hash della transazione dal formato hex all'hash della transazione nel formato bytearray. Questo è un passaggio cruciale. Altrimenti, riceveresti un errore che indica che non esiste un blocco con tale hash. Prendiamo l'hash di una transazione in formato hex come esempio per convertirlo in formato bytearray. L'esempio è il seguente:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Prima rovescia l'hash della transazione:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Gli sviluppatori possono eseguire questo passaggio utilizzando lo strumento di conversione Hex Number (little endian) fornito da SmartX.
Quindi, converti il risultato ottenuto in 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. Alla fine, converti il bytearray risultante in una stringa simile:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fDi seguito è riportato un esempio della funzione GetTransactionByHash, che ottiene una transazione tramite l'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 txGetTransactionHeight
GetTransactionHeight viene utilizzato per ottenere l'altezza della transazione tramite l'hash della transazione. Prendiamo l'hash dall'esempio precedente:
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 l'hash del contratto. Il processo di conversione dell'hash del contratto è simile a quello della 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 un blocco in base all'altezza del blocco:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Ottenere un blocco in base all'hash del blocco:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Come utilizzare Block API
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 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 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 è usato 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 txPuoi trovare la guida completa nel nostro .
Epifania
Blockchain & Block API è una parte indispensabile dei contratti smart, poiché puoi utilizzarli per richiedere dati sulla blockchain e dati del blocco nei contratti smart. Negli articoli seguenti discuteremo come utilizzare gli altri API e scopriremo la loro interazione con la blockchain Ontology.
L'articolo è stato tradotto dall'editoria Hashrate&Shares appositamente per OntologyRussia.
Sei uno sviluppatore? Unisciti alla nostra comunità tecnica su . Inoltre, dai un'occhiata a sul nostro sito, dove puoi trovare strumenti per sviluppatori, documentazione e molto altro.
Ontology
- /
- Telegram /
- /
Fonte: habr.com
