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ť zo série návodov na vytváranie inteligentných zmlúv Python v blockchain sieti Ontology pomocou nástroja na vývoj inteligentných zmlúv. SmartX.

V tomto článku sa začneme oboznamovať s API inteligentných zmlúv Ontology. Ontology smart contract API je rozdelené do 7 modulov:

  1. Blockchain & Block API,
  2. runtime API,
  3. úložisko API,
  4. natívne API,
  5. Upgrade API,
  6. Execution Engine API a
  7. Rozhranie API pre statické a dynamické hovory.

Blockchain & Block API je hlavnou súčasťou systému inteligentných zmlúv Ontology. Blockchain API podporuje základné operácie blockchainových dotazov, ako je získanie aktuálnej výšky bloku, zatiaľ čo Block API podporuje základné operácie blokových dotazov, ako je dotazovanie sa na počet transakcií pre daný blok.

Začnime!

Najprv vytvorte novú zmluvu v SmartXa potom postupujte podľa pokynov nižšie.

1. Ako používať Blockchain API

Odkazy na funkcie inteligentnej zmluvy sú totožné s odkazmi v Pythone. Podľa potreby môžete zadať príslušné funkcie. Napríklad nasledujúci príkaz predstavuje funkciu GetHeight na získanie aktuálnej výšky bloku a funkciu GetHeader na získanie hlavičky bloku.

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

GetHeight

GetHeight sa používa na získanie posledného poradového čísla bloku v blockchaine, ako je znázornené v príklade nižšie. V poslednom príklade pre pohodlie vynecháme hlavnú funkciu, 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

GetHeader

GetHeader slúži na získanie hlavičky bloku, parametrom 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

GetTransactionByHash

GetTransactionByHash sa používa na získanie transakcie prostredníctvom hash transakcie. Hash transakcie sa odošle na GetTransactionByHash ako parametre vo formáte bytearray. Kľúčom k tejto funkcii je previesť transakčný hash v hexadecimálnom formáte na transakčný hash vo formáte bytearray. Toto je dôležitý krok. V opačnom prípade by ste dostali chybu, ktorá naznačuje, že neexistuje žiadny blok s týmto hashom bloku. Zoberme si transakčný hash v hexadecimálnom formáte ako príklad na jeho konverziu do formátu bytearray. Príklad vyzerá takto:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Najprv zrušte hash transakcie:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Vývojári môžu tento krok vykonať pomocou nástroja na konverziu Hex Number (little endian) Number, ktorý poskytuje SmartX.

Potom preveďte výsledok 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}

Dá sa to urobiť pomocou nástroja na konverziu String Byte Array, ktorý poskytuje SmartX. Nakoniec skonvertujte výsledný bajtový lúč na podobný reťazec:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Nasleduje príklad funkcie GetTransactionByHash, ktorá berie transakciu pomocou hash transakcie:

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 sa používa na získanie výšky transakcie prostredníctvom hashu transakcie. Zoberme si 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

GetContract

Vývojári môžu použiť funkciu GetContract na získanie zmluvy prostredníctvom hash zmluvy. Proces konverzie hash zmluvy je rovnaký ako proces konverzie hash transakcie uvedený 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

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

1. Získajte výšku bloku po bloku:

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

2. Získajte blok po bloku hash:

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

2. Ako používať Block API

V Block API sú dostupné tri funkcie: GetTransactions, GetTransactionCountA GetTransactionByIndex. Rozoberieme ich jeden po druhom.

GetTransactionCount

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

GetTransactions

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

GetTransactionByIndex

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

Kompletný návod nájdete na našom GitHub.

Doslov

Blockchain & Block API je nevyhnutnou súčasťou inteligentných zmlúv, pretože ich môžete použiť na vyžiadanie údajov blockchainu a blokovanie údajov v inteligentných zmluvách. V budúcich článkoch budeme diskutovať o tom, ako používať zvyšok API a zistiť, ako interagujú s blockchainom Ontológie.

Č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

Pridať komentár