Jak napsat chytrou smlouvu v Pythonu na 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 ze série výukových programů o vytváření chytrých smluv Python na blockchainové síti Ontology pomocí nástroje pro vývoj chytrých smluv. SmartX.

V tomto článku se začneme seznamovat s API inteligentních kontraktů Ontology. Ontology smart contract API je rozděleno do 7 modulů:

  1. Blockchain & Block API,
  2. runtime API,
  3. API úložiště,
  4. nativní API,
  5. Upgrade API,
  6. Prováděcí Engine API a
  7. Statické a dynamické volání API.

Blockchain & Block API je hlavní součástí systému inteligentních smluv Ontology. Blockchain API podporuje základní blockchainové dotazovací operace, jako je získání aktuální výšky bloku, zatímco Block API podporuje základní blokové dotazovací operace, jako je dotazování na počet transakcí pro daný blok.

Začněme!

Nejprve vytvořte novou smlouvu v SmartXa poté postupujte podle pokynů níže.

1. Jak používat Blockchain API

Odkazy na funkce inteligentní smlouvy jsou totožné s odkazy v Pythonu. Podle potřeby můžete zadat odpovídající funkce. Například následující příkaz zavádí funkci GetHeight pro získání aktuální výšky bloku a funkci GetHeader pro získání záhlaví bloku.

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

GetHeight

GetHeight se používá k získání posledního pořadového čísla bloku v blockchainu, jak je znázorněno v příkladu níže. V posledním příkladu vynecháme pro pohodlí funkci Hlavní, ale v případě potřeby ji můžete přidat.

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ží k získání hlavičky bloku, parametrem je sériové čí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 se používá k získání transakce prostřednictvím transakčního hashe. Hash transakce je odeslán na GetTransactionByHash jako parametry ve formátu bytearray. Klíčem k této funkci je převést transakční hash v hexadecimálním formátu na transakční hash ve formátu bytearray. To je důležitý krok. V opačném případě byste dostali chybu, která označuje, že neexistuje žádný blok s tímto hashem bloku. Vezměme si transakční hash v hexadecimálním formátu jako příklad pro převod do formátu byearray. Příklad vypadá takto:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Nejprve změňte hodnotu hash transakce:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Vývojáři mohou tento krok provést pomocí nástroje pro převod Hex Number(little endian)Number poskytovaného SmartX.

Poté převeďte výsledek do formátu byearray:

{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 převod String Byte Array od SmartX. Nakonec převeďte výsledný bytearray na podobný řetězec:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Následuje příklad funkce GetTransactionByHash, která bere transakci pomocí hash 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 prostřednictvím hashe transakce. Vezměme hash z výše uvedeného příkladu:

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 k získání smlouvy prostřednictvím hash smlouvy. Proces konverze hash smlouvy je stejný jako proces konverze hash transakce uvedený 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ískejte blok po bloku výšku:

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

2. Získejte blok po bloku hash:

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

2. Jak používat Block API

V Block API jsou k dispozici tři funkce: GetTransactions, GetTransactionCountA GetTransactionByIndex. Rozebereme je jeden po druhém.

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 pomocí funkce GetTransactions získat všechny transakce 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 starts from 0.
    return tx

Kompletní průvodce najdete na našem webu GitHub.

Doslov

Blockchain & Block API je nepostradatelnou součástí chytrých kontraktů, protože je můžete použít k vyžádání blockchainových dat a blokování dat v chytrých kontraktech. V následujících článcích probereme, jak používat zbývající API a zjistíme, jak interagují s blockchainem Ontologie.

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

Jste vývojář? Připojte se k naší technické komunitě na Svár. Také se podívejte na Vývojářské centrum na našem webu, kde najdete vývojářské nástroje, dokumentaci a další.

Ontologie

Zdroj: www.habr.com

Přidat komentář