
To pierwsza część serii artykułów edukacyjnych na temat tworzenia smart kontraktów w Pythonie w sieci blockchain Ontology za pomocą narzędzia do tworzenia smart kontraktów. .
W tym artykule rozpoczniemy zapoznawanie się z API smart kontraktu Ontology. API smart kontraktu Ontology jest podzielone na 7 modułów:
- Blockchain i Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API oraz
- Static i Dynamic Call API.
Blockchain i Block API jest kluczową częścią systemu smart kontraktów Ontology. Blockchain API wspiera podstawowe operacje związane z zapytaniami blockchain, takie jak pobieranie bieżącej wysokości bloku, podczas gdy Block API wspiera podstawowe operacje zapytaniowe związane z blokami, takie jak zapytanie o liczbę transakcji dla danego bloku.
Przejdźmy do rzeczy!
Na początek stwórz nowy kontrakt w , a następnie postępuj zgodnie z poniższymi instrukcjami.
1. Jak używać Blockchain API
Odnośniki do funkcji smart kontraktów są identyczne z odnośnikami w Pythonie. Możesz wprowadzać odpowiednie funkcje w razie potrzeby. Na przykład, poniższa instrukcja wprowadza GetHeight — funkcję do uzyskiwania bieżącej wysokości bloku, oraz GetHeader — funkcję do uzyskiwania nagłówka bloku.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight jest używane do uzyskiwania ostatniego numeru porządkowego bloku w blockchainie, jak pokazano w poniższym przykładzie. W ostatnim przykładzie dla ułatwienia pominiemy funkcję Main, ale możesz ją dodać, jeśli to konieczne.
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 jest używane do uzyskiwania nagłówka bloku, a jego parametrem jest numer porządkowy bloku w blockchainie. Przykład:
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 jest używane do uzyskiwania transakcji na podstawie hasha transakcji. Hash transakcji jest wysyłany do GetTransactionByHash jako parametry w formacie bytearray. Kluczowym elementem tej funkcji jest konwersja hasha transakcji w formacie hex na hash transakcji w formacie bytearray. To ważny krok. W przeciwnym razie otrzymasz błąd, który wskazuje, że nie ma bloku z takim hashem. Weźmy hash transakcji w formacie hex, jako przykład, aby przekształcić go w format bytearray. Przykład wygląda następująco:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Najpierw odwróć hash transakcji:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Programiści mogą wykonać ten krok za pomocą narzędzia konwersji Hex Number (little endian), które jest dostarczane przez SmartX.
Następnie przekształć uzyskany wynik w 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}Można to zrobić za pomocą narzędzia konwersji String Byte Array, które jest dostarczane przez SmartX. Na koniec przekształć uzyskany bytearray w podobny ciąg:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fPoniżej znajduje się przykład funkcji GetTransactionByHash, która pobiera transakcję za pomocą hasha transakcji:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight używana jest do uzyskania wysokości transakcji za pomocą hasha transakcji. Weźmy hash z powyższego przykładu:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Programiści mogą używać funkcji GetContract, aby uzyskać kontrakt za pomocą hasha kontraktu. Proces konwersji hasha kontraktu jest analogiczny do procesu konwersji hasha transakcji, który został wcześniej wspomniany.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock używana jest do uzyskania bloku. Istnieją dwa sposoby, aby uzyskać konkretny blok.
1. Uzyskać blok po wysokości bloku:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Uzyskać blok po hashu bloku:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Jak używać Block API
Istnieją trzy dostępne funkcje w Block API: GetTransactions, GetTransactionCount, i GetTransactionByIndex. Omówimy je jedna po drugiej.
GetTransactionCount
GetTransactionCount używana jest do uzyskania liczby transakcji dla danego bloku.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Programiści mogą używać funkcji GetTransactions, aby uzyskać wszystkie transakcje w danym bloku.
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 używa się do uzyskania konkretnej transakcji w danym bloku.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # indeks zaczyna się od 0.
return txPełne instrukcje można znaleźć na naszym .
Epilog
Blockchain & Block API jest niezastąpioną częścią inteligentnych kontraktów, ponieważ możesz ich użyć, aby zażądać danych blockchaina i danych bloków w inteligentnych kontraktach. W następnych artykułach omówimy, jak używać pozostałych API i wyjaśnimy ich interakcje z blockchainem Ontology.
Artykuł został przetłumaczony przez redakcję Hashrate&Shares specjalnie dla OntologyRussia.
Jesteś programistą? Dołącz do naszej społeczności technicznej na . Ponadto zajrzyj do na naszej stronie, tam możesz znaleźć narzędzia dla deweloperów, dokumentację i wiele więcej.
Ontology
- /
- Telegram /
- /
Źródło: habr.com
