ProHoster > blog > amministrazione > 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:
Blockchain e API di blocco,
API di esecuzione,
API di archiviazione,
API nativa,
Aggiorna l'API,
API del motore di esecuzione e
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:
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:
GetTransactionHeight viene utilizzato per ottenere l'altezza della transazione utilizzando l'hash della transazione. Prendiamo l'hash dall'esempio sopra:
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.
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.