Jak napsat smart kontrakt v Pythonu v síti Ontology. Část 1: Blockchain & Block API.

Jak napsat chytrou smlouvu v Pythonu na síti Ontology. Část 1: Blockchain & Block API

Toto je první část série výukových článků o vytváření smart kontraktů v Pythonu v blockchainové síti Ontology s pomocí nástroje pro vývoj smart kontraktů. SmartX.

V tomto článku začneme s API smart kontraktů Ontology. API smart kontraktů Ontology je rozděleno do 7 modulů:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API a
  7. Static & Dynamic Call API.

Blockchain & Block API je hlavní částí systému smart kontraktů Ontology. Blockchain API podporuje základní operace blockchainového dotazu, jako je například získání aktuální výšky bloku, zatímco Block API podporuje základní operace dotazu bloku, jako je například dotaz na počet transakcí pro tento blok.

Pojďme na to!

Nejprve vytvořte nový kontrakt v SmartX, a poté se řiďte níže uvedenými pokyny.

1. Jak používat Blockchain API

Odkazy na funkce smart kontraktů jsou totožné s odkazy v Pythonu. Můžete zadávat příslušné funkce podle potřeby. Například následující instrukce zavádí GetHeight – funkci pro získání aktuální výšky bloku a GetHeader – funkci pro získání hlavičky bloku.

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

GetHeight

GetHeight slouží ke získání posledního pořadového čísla bloku v blockchainu, jak je ukázáno v následujícím příkladu. V posledním příkladu pro přehlednost přeskočíme funkci Main, ale můžete ji přidat, pokud to bude potřeba.

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 slouží ke získání hlavičky bloku, parametrem je pořadové číslo bloku v blockchainu. Příklad:

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 slouží ke získání transakce pomocí hash transakce. Hash transakce se posílá do GetTransactionByHash jako parametry v formátu bytearray. Klíčem k této funkci je převod hash transakce z hex formátu na hash transakce v formátu bytearray. To je důležitý krok. Jinak dostanete chybu, která naznačuje, že neexistuje blok s tímto hash bloku. Pojďme vzít hash transakce v hex formátu jako příklad, abychom jej převedli do formátu bytearray. Příklad vypadá takto:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Nejprve otočte hash transakce:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Vývojáři mohou tento krok provést pomocí nástroje pro konverzi Hex Number (little endian) Number, který poskytuje SmartX.

Pak převedete získaný výsledek na formát 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}

To lze provést pomocí nástroje pro konverzi String Byte Array, který poskytuje SmartX. Nakonec převedete získaný bytearray na podobný řetězec:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Níže je příklad funkce GetTransactionByHash, která získá transakci podle hashe transakce:

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

GetTransactionHeight

GetTransactionHeight se používá k získání výšky transakce podle hashe transakce. Pojďme vzít hash z příkladu výše:

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

GetContract

Vývojáři mohou použít funkci GetContract, aby získali kontrakt podle hashe kontraktu. Proces konverze hashe kontraktu je obdobný procesu konverze hashe transakce, jak bylo zmíněno výše.

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

GetBlock

GetBlock se používá k získání bloku. Existují dva způsoby, jak získat konkrétní blok.

1. Získat blok podle výšky bloku:

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

2. Získat blok podle hashe bloku:

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

2. Jak používat Block API

Existují tři dostupné funkce v Block API: GetTransactions, GetTransactionCount, a GetTransactionByIndex. Prozkoumáme je jednu po druhé.

GetTransactionCount

GetTransactionCount se používá k získání počtu transakcí pro daný blok.

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

Vývojáři mohou použít funkci GetTransactions k získání všech transakcí v daném 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

GetTransactionByIndex

GetTransactionByIndex se používá k získání konkrétní transakce v daném 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 začíná od 0.
    return tx

Úplného průvodce najdete na našem GitHub.

Poznámka na závěr

Blockchain & Block API je nezbytnou součástí chytrých smluv, protože je můžete použít k dotazování na data blockchainu a data bloku v chytrých smlouvách. V následujících článcích probereme, jak používat ostatní API a zjistíme jejich interakci s blockchainem Ontology.

Článek byl přeložen redakcí Hashrate&Shares speciálně pro OntologyRussia. klikněte

Jste vývojář? Připojte se k naší technické komunitě na Discord. Navíc se podívejte na Centrum pro vývojáře na našich stránkách, kde můžete najít nástroje pro vývojáře, dokumentaci a mnohem více.

Ontology

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster