Kako napisati pametni ugovor na Pythonu u Ontology mreži. Deo 1: Blockchain i Block API

Kako napisati pametno pogodbo v Pythonu v mreži Ontology. Del 1: Blockchain & Block API

To je prvi del serije izobraževalnih člankov o ustvarjanju pametnih pogodb v Pythonu v blokchain omrežju Ontology z uporabo orodja za razvoj pametnih pogodb. SmartX.

V tem članku bomo začeli z uvodom v API pametne pogodbe Ontology. API pametne pogodbe Ontology je razdeljen na 7 modulov:

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

Blockchain & Block API je osnovni del sistema pametnih pogodb Ontology. Blockchain API podpira osnovne operacije zahtevanja blokov, kot na primer pridobitev trenutne višine bloka, medtem ko Block API podpira osnovne operacije zahtevanja blokov, kot na primer pridobitev števila transakcij za določen blok.

Pojdimo!

Najprej ustvarite novo pogodbo v SmartX, nato pa sledite spodnjim navodilom.

1. Kako uporabljati Blockchain API

Reference na funkcije pametnih pogodb so enake referencam v Pythonu. Ustrezne funkcije lahko vnašate po potrebi. Na primer, spodnja navodila vnašajo GetHeight— funkcijo za pridobitev trenutne višine bloka in GetHeader— funkcijo za pridobitev glave bloka.

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

GetHeight

GetHeight se uporablja za pridobitev zadnjega zaporednega številka bloka v blokchainu, kot je prikazano v spodnjem primeru. V zadnjem primeru bomo za enostavnost izpustili funkcijo Main, lahko pa jo dodate, če je potrebno.

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 zaporedna številka bloka v blokchainu. 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 po hash transakciji. Hash transakcije se pošlje v GetTransactionByHash kot parametri v formatu bytearray. Ključ te funkcije je pretvorba hasha transakcije iz hex formata v hash transakcije v formatu bytearray. To je pomemben korak. V nasprotnem primeru bi dobili napako, ki nakazuje, da ni bloka s takšnim hashom. Poglejmo hash transakcije v hex formatu kot primer, da ga pretvorimo v format bytearray. Primer izgleda takole:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Najprej obrnite hash transakcije:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Razvåtçiki mogu ostvariti ovaj korak pomoću alata za konverziju Hex Number (little endian) koji pruža SmartX.

Zatim pretvorite dobijeni rezultat u 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 se može učiniti pomoću alata za pretvaranje String Byte Array, koji pruža SmartX. Na kraju, pretvorite dobijeni bytearray u sličnu string:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

U nastavku je primer funkcije GetTransactionByHash, koja uzima transakciju putem hash 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 koristi za dobijanje visine transakcije putem hash transakcije. Uzmimo hash iz gornjeg 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

Razvåtçiki mogu koristiti funkciju GetContract da dobiju ugovor putem hash ugovora. Proces pretvaranja hash ugovora je sličan procesu pretvaranja hash transakcije koji je pomenut ranije.

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 koristi za dobijanje bloka. Postoje dva načina da se dobije određeni blok.

1. Dobili blok po visini bloka:

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

2. Dobili blok po hash-u bloka:

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

2. Kako koristiti Block API

Postoje tri dostupne funkcije u Block API: GetTransactions, GetTransactionCount, i GetTransactionByIndex. Razmotrićemo ih jednu po jednu.

GetTransactionCount

GetTransactionCount se koristi za dobijanje broja transakcija za dati 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 uporabljajo funkcijo GetTransactions, da pridobijo vse transakcije v tem 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 tem bloku.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # indeks se začne z 0.
    return tx

Obsežno vodič lahko najdete na naši GitHub.

Zadnja misel

Blockchain & Block API sta nenadomestljiv del pametnih pogodb, saj jih lahko uporabite za pridobitev podatkov o blockchainu in podatkov o bloku v pametnih pogodbah. V naslednjih člankih bomo razpravljali o tem, kako uporabiti ostale API-je in raziskali njihovo sodelovanje z blockchainom Ontology.

Članek je bil preveden uredništvom Hashrate&Shares posebej za OntologyRussia. klik

Da li ste programer? Pridružite se našoj tehničkoj zajednici na Discord. Takođe, posetite Centar za programere na naši spletni strani, tam lahko najdete orodja za razvijalce, dokumentacijo in še več.

Ontology

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster