ProHoster > BLOG > administrare > Cum se scrie un contract inteligent în Python în rețeaua Ontology. Partea 1: Blockchain și Block API
Cum se scrie un contract inteligent în Python în rețeaua Ontology. Partea 1: Blockchain și Block API
Aceasta este prima parte dintr-o serie de tutoriale despre crearea de contracte inteligente Python în rețeaua blockchain Ontology folosind instrumentul de dezvoltare a contractelor inteligente. SmartX.
În acest articol, vom începe cunoașterea API-ului Ontology smart contract. API-ul Ontology smart contract este împărțit în 7 module:
Blockchain și Block API,
runtime API,
API de stocare,
API nativ,
Upgrade API,
Execution Engine API și
API pentru apeluri statice și dinamice.
Blockchain & Block API este partea principală a sistemului de contracte inteligente Ontology. API-ul Blockchain acceptă operațiuni de bază de interogare blockchain, cum ar fi obținerea înălțimii curente a blocului, în timp ce API-ul Block acceptă operațiuni de bază de interogare bloc, cum ar fi interogarea numărului de tranzacții pentru un anumit bloc.
Să începem!
Mai întâi, creați un nou contract în SmartXși apoi urmați instrucțiunile de mai jos.
1. Cum să utilizați API-ul Blockchain
Link-urile către funcțiile smart contract sunt identice cu link-urile Python. Puteți introduce funcțiile corespunzătoare după cum este necesar. De exemplu, următoarea instrucțiune introduce o funcție GetHeight pentru a obține înălțimea curentă a blocului și o funcție GetHeader pentru a obține antetul blocului.
from ontology.interop.System.Blockchain import GetHeight, GetHeader
GetHeight
GetHeight este folosit pentru a obține ultimul număr de secvență de bloc din blockchain, așa cum se arată în exemplul de mai jos. În ultimul exemplu, vom omite funcția Main pentru comoditate, dar o puteți adăuga dacă este necesar.
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 este folosit pentru a obține antetul blocului, parametrul este numărul de serie al blocului din blockchain. Exemplu:
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 este folosit pentru a obține o tranzacție printr-un hash de tranzacție. Hash-ul tranzacției este trimis către GetTransactionByHash ca parametri în format bytearray. Cheia acestei funcții este de a converti hash-ul tranzacției în format hex în hash-ul tranzacției în format bytearray. Acesta este un pas important. În caz contrar, veți primi o eroare care indică faptul că nu există niciun bloc cu acel hash de bloc. Să luăm hash-ul tranzacției în format hex ca exemplu pentru a-l converti în format bytearray. Un exemplu arată astfel:
Acest lucru se poate face folosind instrumentul de conversie String Byte Array oferit de SmartX. În cele din urmă, convertiți bytearrayul rezultat într-un șir similar:
Dezvoltatorii pot folosi funcția GetContract pentru a obține un contract prin hash-ul contractului. Procesul de conversie hash contractual este același cu procesul de conversie hash al tranzacției menționat mai sus.
GetBlock este folosit pentru a obține un bloc. Există două moduri de a obține un anumit bloc.
1. Obțineți înălțimea bloc cu bloc:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block
2. Obțineți un hash bloc cu bloc:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)
2. Cum se utilizează Block API
Există trei funcții disponibile în Block API: GetTransactions, GetTransactionCountși GetTransactionByIndex. Le vom descompune unul câte unul.
GetTransactionCount
GetTransactionCount este folosit pentru a obține numărul de tranzacții pentru un anumit bloc.
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
Dezvoltatorii pot folosi funcția GetTransactions pentru a obține toate tranzacțiile dintr-un anumit bloc.
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 este folosit pentru a obține o anumită tranzacție într-un anumit bloc.
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
Un ghid complet poate fi găsit pe site-ul nostru GitHub.
postfață
API-ul Blockchain & Block este o parte indispensabilă a contractelor inteligente, deoarece le puteți utiliza pentru a solicita date blockchain și a bloca datele în contractele inteligente. În următoarele articole, vom discuta despre cum să folosim restul API-urilor și vom afla cum interacționează acestea cu blockchain-ul Ontology.
Articolul a fost tradus de editorii Hashrate&Shares în special pentru OntologyRussia. clic
Ești dezvoltator? Alăturați-vă comunității noastre tehnologice la Discordie. De asemenea, aruncați o privire la Centrul pentru dezvoltatori pe site-ul nostru web, unde puteți găsi instrumente pentru dezvoltatori, documentație și multe altele.