Jak napisać smart kontrakt w Pythonie w sieci Ontology. Część 1: Blockchain i Block API

Jak napisać smart kontrakt w Pythonie w sieci Ontology. Część 1: Blockchain i Block API

Jest to pierwsza część serii samouczków dotyczących tworzenia inteligentnych kontraktów w języku Python w sieci blockchain Ontology za pomocą narzędzia do tworzenia inteligentnych kontraktów. SmartX.

W tym artykule rozpoczniemy naszą znajomość API smart kontraktów Ontology. API smart kontraktów Ontology jest podzielone na 7 modułów:

  1. Blockchain & Block API,
  2. środowisko wykonawcze API,
  3. API przechowywania,
  4. natywne API,
  5. Uaktualnij API,
  6. API mechanizmu wykonawczego i
  7. Interfejs API połączeń statycznych i dynamicznych.

Blockchain & Block API to główna część systemu inteligentnych kontraktów Ontology. Blockchain API obsługuje podstawowe operacje zapytań blockchain, takie jak uzyskiwanie bieżącej wysokości bloku, podczas gdy Block API obsługuje podstawowe operacje zapytań blokowych, takie jak zapytanie o liczbę transakcji dla danego bloku.

Zacznijmy!

Najpierw utwórz nową umowę w SmartXa następnie postępuj zgodnie z poniższymi instrukcjami.

1. Jak korzystać z API Blockchain

Łącza do funkcji inteligentnego kontraktu są identyczne z łączami Pythona. W razie potrzeby można wprowadzić odpowiednie funkcje. Na przykład poniższa instrukcja wprowadza funkcję GetHeight w celu uzyskania bieżącej wysokości bloku oraz funkcję GetHeader w celu pobrania nagłówka bloku.

from ontology.interop.System.Blockchain import GetHeight, GetHeader

Uzyskaj wysokość

GetHeight służy do uzyskania numeru sekwencji ostatniego bloku w łańcuchu bloków, jak pokazano w poniższym przykładzie. W ostatnim przykładzie dla wygody pominiemy funkcję Main, ale w razie potrzeby możesz ją dodać.

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

Pobierz nagłówek

GetHeader służy do pobierania nagłówka bloku, parametrem jest numer seryjny 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 header

Pobierz TransakcjęByHash

GetTransactionByHash służy do uzyskiwania transakcji za pośrednictwem skrótu transakcji. Hash transakcji jest wysyłany do Pobierz TransakcjęByHash jako parametry w formacie bytearray. Kluczem do tej funkcji jest konwersja skrótu transakcji w formacie szesnastkowym na skrót transakcji w formacie bytearray. To ważny krok. W przeciwnym razie pojawiłby się błąd wskazujący, że nie ma bloku z tym skrótem bloku. Weźmy jako przykład skrót transakcji w formacie szesnastkowym, aby przekonwertować go na format bajtowej tablicy. Przykład wygląda następująco:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Najpierw odwróć hash transakcji:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Deweloperzy mogą wykonać ten krok za pomocą narzędzia do konwersji liczb szesnastkowych (little endian) dostarczonego przez SmartX.

Następnie przekonwertuj wynik na format bajtowej tablicy:

{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 do konwersji String Byte Array dostarczonego przez SmartX. Na koniec przekonwertuj wynikową tablicę bajtów na podobny ciąg:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Poniżej znajduje się przykład funkcji GetTransactionByHash, która pobiera transakcję przy użyciu skrótu transakcji:

from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
    # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    tx=GetTransactionByHash(tx_hash)
    return tx

Pobierz wysokość transakcji

GetTransactionHeight służy do uzyskania wysokości transakcji za pomocą skrótu 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 height

PobierzKontrakt

Deweloperzy mogą użyć funkcji GetContract, aby uzyskać kontrakt za pomocą skrótu kontraktu. Proces konwersji skrótu kontraktu jest taki sam, jak wspomniany powyżej proces konwersji skrótu transakcji.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

Pobierz blok

GetBlock służy do uzyskania bloku. Istnieją dwa sposoby na zdobycie określonego bloku.

1. Uzyskaj blok po wysokości bloku:

from ontology.interop.System.Blockchain import GetBlock
def demo():
    block=GetBlock(1408)
    return block

2. Uzyskaj hash blok po bloku:

from ontology.interop.System.Blockchain import GetBlock
def demo():    
    block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
    block=GetBlock(block_hash)

2. Jak korzystać z Block API

W Block API dostępne są trzy funkcje: Pobierz Transakcje, Pobierz liczbę transakcjii Pobierz TransakcjęByIndex. Rozłożymy je jeden po drugim.

Pobierz liczbę transakcji

GetTransactionCount służy 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 count

Pobierz Transakcje

Deweloperzy mogą użyć 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 txs

Pobierz TransakcjęByIndex

GetTransactionByIndex służy do uzyskania określonej 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) # index starts from 0.
    return tx

Kompletny przewodnik można znaleźć na naszej stronie GitHub.

Posłowie

Blockchain & Block API jest nieodzowną częścią inteligentnych kontraktów, ponieważ można ich używać do żądania danych blockchain i blokowania danych w inteligentnych kontraktach. W kolejnych artykułach omówimy, jak korzystać z pozostałych interfejsów API i dowiemy się, w jaki sposób wchodzą one w interakcje z łańcuchem blokowym Ontology.

Artykuł został przetłumaczony przez redakcję Hashrate&Shares specjalnie dla OntologyRussia. płakać

jesteś programistą? Dołącz do naszej społeczności technicznej pod adresem Discord. Także przyjrzyj się Centrum programistów na naszej stronie internetowej, gdzie można znaleźć narzędzia dla programistów, dokumentację i nie tylko.

Ontologia

Źródło: www.habr.com

Dodaj komentarz