Ako napísať inteligentnú zmluvu v Pythone v sieti Ontology. Časť 1: Blockchain & Block API

Ako napísať inteligentnú zmluvu v Pythone v sieti Ontology. Časť 1: Blockchain & Block API

Toto je prvá časť série tutoriálov o vytváraní inteligentných zmlúv v jazyku Python na blockchainovej sieti Ontology pomocou nástroja na vývoj inteligentných zmlúv. SmartX.

V tomto článku začneme s úvodom do rozhrania API pre inteligentné zmluvy Ontology. Rozhranie API pre inteligentné zmluvy Ontology je rozdelené do siedmich modulov:

  1. Blockchain a blokové API,
  2. Rozhranie API pre beh,
  3. API úložiska,
  4. Natívne API,
  5. Aktualizácia API,
  6. API pre vykonávací mechanizmus a
  7. API pre statické a dynamické volania.

Rozhranie Blockchain & Block API je základnou súčasťou systému inteligentných kontraktov Ontology. Rozhranie Blockchain API podporuje základné operácie s dotazmi na blockchain, ako je napríklad načítanie aktuálnej výšky bloku, zatiaľ čo rozhranie Block API podporuje základné operácie s dotazmi na bloky, ako je napríklad dotazovanie na počet transakcií pre daný blok.

Poďme na to!

Ak chcete začať, vytvorte novú zmluvu v SmartXa potom postupujte podľa pokynov nižšie.

1. Ako používať rozhranie Blockchain API

Referencie na funkcie inteligentných kontraktov sú identické s referenciami v Pythone. Podľa potreby môžete vložiť zodpovedajúce funkcie. Napríklad nasledujúci príkaz vloží funkciu GetHeight, funkciu na načítanie aktuálnej výšky bloku, a funkciu GetHeader, funkciu na načítanie hlavičky bloku.

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

GetHeight

Funkcia GetHeight sa používa na získanie najnovšieho poradového čísla bloku v blockchaine, ako je znázornené v príklade nižšie. V tomto poslednom príklade pre uľahčenie vynecháme funkciu Main, ale v prípade potreby ju môžete pridať.

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

Získať hlavičku

GetHeader sa používa na získanie hlavičky bloku; parameter je sériové číslo bloku v blockchaine. Prí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

ZískaťTransactionByHash

GetTransactionByHash sa používa na načítanie transakcie prostredníctvom hashu transakcie. Hash transakcie sa odošle do ZískaťTransactionByHash Ako parametre vo formáte bytearray. Kľúčom k tejto funkcii je konverzia hexadecimálneho hašu transakcie na haš transakcie bytearray. Toto je dôležitý krok. V opačnom prípade by sa zobrazila chyba, ktorá by indikovala, že s týmto hašom bloku neexistuje žiadny blok. Vezmime si ako príklad hexadecimálny haš transakcie a skonvertujme ho do formátu bytearray. Príklad vyzerá takto:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Najprv obrátime haš transakcie:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Vývojári môžu tento krok vykonať pomocou nástroja na konverziu hexadecimálnych čísel (little endian) od spoločnosti SmartX.

Potom preveďte výslednú hodnotu do formátu 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}

Toto je možné vykonať pomocou nástroja na konverziu poľa reťazcov a bajtov od spoločnosti SmartX. Nakoniec skonvertujte výsledné pole bajtov na reťazec takto:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Nižšie je uvedený príklad funkcie GetTransactionByHash, ktorá berie transakciu podľa jej hash hodnoty:

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

ZískaťVýškuTransaction

Funkcia GetTransactionHeight sa používa na získanie výšky transakcie pomocou hashu transakcie. Použime hash z vyššie uvedeného príkladu:

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

Získať zmluvu

Vývojári môžu použiť funkciu GetContract na načítanie zmluvy prostredníctvom jej hashu. Proces konverzie hashu zmluvy je identický s procesom konverzie hashu transakcie opísaným vyššie.

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

GetBlock

Funkcia GetBlock sa používa na získanie bloku. Existujú dva spôsoby, ako získať konkrétny blok.

1. Získajte blok po bloku:

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

2. Získajte hash blok po bloku:

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

2. Ako používať rozhranie Block API

V rozhraní Block API sú k dispozícii tri funkcie: Získať transakcie, ZískaťPočetTransactionA ZískaťTransactionByIndexBudeme ich analyzovať jeden po druhom.

ZískaťPočetTransaction

Funkcia GetTransactionCount sa používa na získanie počtu transakcií pre 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

Získať transakcie

Vývojári môžu použiť funkciu GetTransactions na získanie všetkých transakcií v danom 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

ZískaťTransactionByIndex

GetTransactionByIndex sa používa na získanie konkrétnej transakcie v danom 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

Celého sprievodcu nájdete na našej GitHub.

Doslov

Rozhranie Blockchain & Block API je neoddeliteľnou súčasťou inteligentných zmlúv, pretože ho môžete použiť na dotazovanie blockchainu a blokovanie údajov v rámci inteligentných zmlúv. V budúcich článkoch sa budeme venovať používaniu zostávajúcich rozhraní API a preskúmame ich interakcie s blockchainom Ontology.

Článok bol preložený redaktormi Hashrate&Shares špeciálne pre OntologyRussia. cvaknutie

Ste vývojár? Pripojte sa k našej technickej komunite na zvar. Tiež sa pozrite na Vývojárske centrum na našej webovej stránke, kde nájdete vývojárske nástroje, dokumentáciu a ďalšie.

ontológie

Zdroj: hab.com

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster