Kako napisati pametno pogodbo v Pythonu v omrežju Ontology. 1. del: Blockchain & Block API

Kako napisati pametno pogodbo v Pythonu v omrežju Ontology. 1. del: Blockchain & Block API

To je prvi del v nizu vadnic o ustvarjanju pametnih pogodb Python v omrežju verige blokov Ontology z uporabo orodja za razvoj pametnih pogodb. SmartX.

V tem članku se bomo začeli seznanjati z API-jem za pametne pogodbe Ontology. API pametne pogodbe Ontology je razdeljen na 7 modulov:

  1. Blockchain & Block API,
  2. API za izvajanje,
  3. API za shranjevanje,
  4. izvorni API,
  5. API za nadgradnjo,
  6. API izvedbenega mehanizma in
  7. API za statični in dinamični klic.

Blockchain & Block API je glavni del sistema pametnih pogodb Ontology. Blockchain API podpira osnovne poizvedbene operacije v verigi blokov, kot je pridobivanje trenutne višine bloka, medtem ko Block API podpira osnovne poizvedbene operacije po blokih, kot je poizvedovanje po številu transakcij za dani blok.

Začnimo!

Najprej ustvarite novo pogodbo v SmartXin sledite spodnjim navodilom.

1. Kako uporabljati Blockchain API

Povezave do funkcij pametne pogodbe so enake povezavam Python. Po potrebi lahko vnesete ustrezne funkcije. Naslednji stavek na primer uvede funkcijo GetHeight za pridobitev trenutne višine bloka in funkcijo GetHeader za pridobitev glave bloka.

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

GetHeight

GetHeight se uporablja za pridobitev zadnje zaporedne številke bloka v verigi blokov, kot je prikazano v spodnjem primeru. V zadnjem primeru bomo zaradi priročnosti izpustili glavno funkcijo, vendar jo lahko po potrebi dodate.

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 se uporablja za pridobitev glave bloka, parameter je serijska številka bloka v verigi blokov. primer:

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 uporablja za pridobitev transakcije prek zgoščene vrednosti transakcije. Zgoščena vrednost transakcije je poslana na GetTransactionByHash kot parametre v formatu bytearray. Ključ do te funkcije je pretvorba zgoščene vrednosti transakcije v šestnajstiškem formatu v zgoščeno vrednost transakcije v formatu bytearray. To je pomemben korak. V nasprotnem primeru bi prejeli napako, ki kaže, da ni bloka s to zgoščeno vrednostjo bloka. Vzemimo zgoščeno vrednost transakcije v šestnajstiškem formatu kot primer, da ga pretvorimo v format bytearray. Primer izgleda takole:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Najprej obrnite zgoščeno vrednost transakcije:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Razvijalci lahko ta korak izvedejo z orodjem za pretvorbo številk Hex Number(little endian), ki ga ponuja SmartX.

Nato pretvorite rezultat v format 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 lahko storite z orodjem za pretvorbo String Byte Array, ki ga ponuja SmartX. Končno pretvorite nastalo niz bytearray v podoben niz:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Sledi primer funkcije GetTransactionByHash, ki sprejme transakcijo z uporabo zgoščene vrednosti transakcije:

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 uporablja za pridobitev višine transakcije prek zgoščene vrednosti transakcije. Vzemimo zgoščeno vrednost iz zgornjega primera:

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

GetContract

Razvijalci lahko s funkcijo GetContract pridobijo pogodbo prek zgoščene vrednosti pogodbe. Postopek pretvorbe zgoščene vrednosti pogodbe je enak zgoraj omenjenemu postopku pretvorbe zgoščene vrednosti transakcije.

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 uporablja za pridobitev bloka. Do določenega bloka lahko pridete na dva načina.

1. Pridobite višino bloka za blokom:

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

2. Pridobite zgoščeno vrednost blok za blokom:

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

2. Kako uporabljati Block API

V Block API so na voljo tri funkcije: GetTransactions, GetTransactionCountIn GetTransactionByIndex. Razčlenili jih bomo enega za drugim.

GetTransactionCount

GetTransactionCount se uporablja za pridobitev števila transakcij za določen 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

Razvijalci lahko s funkcijo GetTransactions pridobijo vse transakcije v določenem 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 uporablja za pridobitev določene transakcije v danem 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

Popoln vodnik najdete na našem GitHub.

spremna beseda

Blockchain & Block API je nepogrešljiv del pametnih pogodb, saj jih lahko uporabite za zahtevanje podatkov verige blokov in blokiranje podatkov v pametnih pogodbah. V naslednjih člankih bomo razpravljali o uporabi preostalih API-jev in ugotovili, kako delujejo z verigo blokov Ontology.

Članek so posebej za OntologyRussia prevedli uredniki Hashrate&Shares. kliknite

Ste razvijalec? Pridružite se naši tehnični skupnosti na Razpad. Oglejte si tudi Center za razvijalce na naši spletni strani, kjer lahko najdete orodja za razvijalce, dokumentacijo in drugo.

Ontologija

Vir: www.habr.com

Dodaj komentar