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

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

Ovo je prvi dio serije obrazovnih članaka o stvaranju pametnih ugovora na Pythona u blockchain mreži Ontology uz pomoć alata za razvoj pametnih ugovora. SmartX.

U ovom članku ćemo započeti upoznavanje s API-jem pametnog ugovora Ontology. API pametnog ugovora Ontology podijeljen je na 7 modula:

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

Blockchain & Block API je osnovni dio sustava pametnih ugovora Ontology. Blockchain API podržava osnovne operacije blockchain upita, kao što je dobivanje trenutne visine bloka, dok Block API podržava osnovne operacije upita o bloku, kao što je upit o broju transakcija za dati blok.

Krenimo!

Za početak, kreirajte novi ugovor u SmartX, a zatim slijedite dolje navedene upute.

1. Kako koristiti Blockchain API

Reference funkcija pametnih ugovora su identične referencama Pythona. Možete unijeti odgovarajuće funkcije po potrebi. Na primjer, dolje navedena instrukcija unosi GetHeight— funkciju za dobivanje trenutne visine bloka, i GetHeader— funkciju za dobivanje zaglavlja bloka.

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

GetHeight

GetHeight koristi se za dobivanje posljednjeg rednog broja bloka u blockchainu, kao što je prikazano u dolje navedenom primjeru. U posljednjem primjeru, radi lakšeg razumijevanja, preskočit ćemo funkciju Main, ali je možete dodati ako 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 koristi za dobivanje zaglavlja bloka, a kao parametar koristi redni broj bloka u blockchainu. Primjer:

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 koristi se za dobivanje transakcije putem hasha transakcije. Hash transakcije šalje se u GetTransactionByHash kao parametri u formatu bytearray. Ključ ove funkcije je pretvaranje hasha transakcije iz hex formata u hash transakcije u formatu bytearray. Ovo je važan korak. Inače biste dobili grešku koja ukazuje da ne postoji blok s tim hashom. Uzmimo hash transakcije u hex formatu kao primjer, kako bismo ga prebacili u format bytearray. Primjer izgleda ovako:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Prvo obrnite hash transakcije:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Programeri mogu izvršiti ovaj korak pomoću alata za konverziju Hex Number (little endian) koji nudi SmartX.

Zatim pretvorite 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 korištenjem alata za pretvorbu String Byte Array, koji nudi SmartX. Na kraju, pretvorite dobijeni bytearray u sličan string:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

U nastavku je primjer funkcije GetTransactionByHash, koja preuzima transakciju putem hash-a 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 dobivanje visine transakcije putem hash-a transakcije. Uzmimo hash iz prethodnog primjera:

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

GetContract

Programeri mogu koristiti funkciju GetContract kako bi dobili ugovor putem hash-a ugovora. Proces konverzije hash-a ugovora sličan je procesu konverzije hash-a transakcije koji je spomenut 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 preuzimanje bloka. Postoje dva načina da se dobije određeni blok.

1. Dobiti blok prema visini bloka:

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

2. Dobiti blok prema 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-ju: GetTransactions, GetTransactionCount, i GetTransactionByIndex. Razmotrićemo ih jednu po jednu.

GetTransactionCount

GetTransactionCount se koristi za dobivanje 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

Razvijači mogu koristiti funkciju GetTransactions za dobivanje svih transakcija u ovom 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 koristi za dobivanje specifične transakcije u ovom 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 počinje od 0.
    return tx

Potpuni vodič možete pronaći na našoj GitHub.

Epilog

Blockchain & Block API je neizostavan deo pametnih ugovora, jer ih možete koristiti za zahteve podataka iz blockchain-a i podataka o bloku u pametnim ugovorima. U narednim člancima ćemo raspraviti kako koristiti ostale API-jeve i istražiti njihovu međuzavisnost s blockchain-om Ontology.

Članak je preveden uredništvom Hashrate&Shares posebno za OntologyRussia. klik

Jeste li programer? Pridružite se našoj tehničkoj zajednici na Discord. Također, zavirite u Centar za programere na našoj web stranici, tamo možete pronaći alate za programere, dokumentaciju i još mnogo toga.

Ontology

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster