
Aceasta este prima parte dintr-o serie de articole educaționale despre crearea de contracte inteligente în Python în rețeaua blockchain Ontology, folosind instrumentul de dezvoltare a contractelor inteligente. .
În acest articol, vom începe să ne familiarizăm cu API-ul contractului inteligent Ontology. API-ul contractului inteligent Ontology este împărțit în 7 module:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API și
- Static & Dynamic Call API.
Blockchain & Block API este partea principală a sistemului de contracte inteligente Ontology. API-ul Blockchain susține operațiuni de bază pentru cererile blockchain, cum ar fi obținerea înălțimii curente a blocului, în timp ce API-ul Block susține operațiuni de bază pentru cererile de bloc, cum ar fi solicitarea numărului de tranzacții pentru un anumit bloc.
Să începem!
Pentru început, creați un nou contract în , apoi urmați instrucțiunile de mai jos.
1. Cum să utilizați Blockchain API
Legăturile către funcțiile contractelor inteligente sunt identice cu legăturile Python. Puteți introduce funcțiile corespunzătoare după necesitate. De exemplu, instrucțiunea de mai jos introduce GetHeight— funcția pentru obținerea înălțimii curente a blocului, și GetHeader— funcția pentru obținerea titlului blocului.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight este utilizat pentru a obține ultimul număr de ordine al blocului în blockchain, așa cum se arată în exemplul de mai jos. În ultimul exemplu, pentru comoditate, vom omite funcția Main, 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 functionGetHeader
GetHeader este utilizat pentru a obține titlul blocului, parametrul fiind numărul de ordine al blocului în 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 headerGetTransactionByHash
GetTransactionByHash este utilizat pentru a obține tranzacția prin hash-ul tranzacțiilor. Hash-ul tranzacției este trimis în GetTransactionByHash ca parametru în format bytearray. Cheia acestei funcții este conversia hash-ului tranzacției din format hex în hash-ul tranzacției în format bytearray. Acesta este un pas important. Altfel, veți primi o eroare care indică că nu există un bloc cu acest hash. Să luăm hash-ul tranzacției în format hex ca exemplu pentru a-l converti în format bytearray. Exemplul arată astfel:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Mai întâi, răsturnați hash-ul tranzacției:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Dezvoltatorii pot realiza acest pas cu ajutorul instrumentului de conversie Hex Number (little endian) oferit de SmartX.
Apoi, transformați rezultatul obținut într-un format 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}Acest lucru se poate face cu ajutorul instrumentului de conversie String Byte Array, care este furnizat de SmartX. La final, transformați bytearray-ul obținut într-un string similar:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fMai jos este un exemplu de funcție GetTransactionByHash, care preia o tranzacție prin intermediul hash-ului tranzacției:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight este utilizat pentru a obține înălțimea unei tranzacții prin intermediul hash-ului tranzacției. Să luăm hash-ul din exemplul de mai sus:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Dezvoltatorii pot utiliza funcția GetContract pentru a obține un contract prin intermediul hash-ului contractului. Procesul de conversie a hash-ului contractului este similar cu cel al hash-ului tranzacției menționat mai sus.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock este utilizat pentru a obține un bloc. Există două modalități de a obține un bloc specific.
1. Obțineți blocul după înălțimea blocului:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Obțineți blocul după hash-ul blocului:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Cum să utilizați Block API
Există trei funcții disponibile în Block API: GetTransactions, GetTransactionCount, și GetTransactionByIndex. Le vom analiza una câte una.
GetTransactionCount
GetTransactionCount este utilizat 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 countGetTransactions
Dezvoltatorii pot utiliza funcția GetTransactions pentru a obține toate tranzacțiile din acest bloc.
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 este utilizat pentru a obține o tranzacție specifică din acest bloc.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # indexul începe de la 0.
return txGhidul complet poate fi găsit pe site-ul nostru .
Cuvânt înainte
Blockchain & Block API este o parte esențială a contractelor inteligente, deoarece le puteți utiliza pentru a solicita datele blockchain-ului și datele blocului în contractele inteligente. În articolele următoare, vom discuta despre utilizarea celorlalte API-uri și vom explora interacțiunile lor cu blockchain-ul Ontology.
Articolul a fost tradus de redacția Hashrate&Shares special pentru OntologyRussia.
Ești dezvoltator? Alătură-te comunității noastre tehnice pe . De asemenea, aruncă o privire pe pe site-ul nostru, unde puteți găsi instrumente pentru dezvoltatori, documentație și multe altele.
Ontology
- /
- Telegram /
- /
Sursa: habr.com
