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

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

Ovo je prvi dio serije edukativnih članaka o kreiranju pametnih ugovora u Pythonu na Ontology blockchain mreži pomoću alata za razvoj pametnih ugovora SmartX.

U ovom članku ćemo započeti naše upoznavanje sa Ontology Smart contract API-jem. Ontology smart contract API je podijeljen u 7 modula:

  1. Blockchain & Block API,
  2. Runtime API
  3. API za pohranu
  4. Native API
  5. API za nadogradnju,
  6. API za izvršni mehanizam i
  7. API za statički i dinamički poziv.

Blockchain & Block API je ključni dio Ontology sistema pametnih ugovora. Blockchain API podržava osnovne operacije blockchain upita, kao što je dobivanje trenutne visine bloka, dok Block API podržava osnovne operacije blokova upita, kao što je ispitivanje broja transakcija za dati blok.

Hajde da počnemo!

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

1. Kako koristiti Blockchain API

Reference funkcije pametnog ugovora su identične Python referencama. Po potrebi možete unijeti relevantne funkcije. Na primjer, sljedeća izjava uvodi GetHeight, funkciju za dobivanje trenutne visine bloka, i GetHeader, funkciju za dobivanje naslova bloka.

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

GetHeight

GetHeight se koristi za dobivanje posljednjeg slijednog broja bloka u blockchainu, kao što je prikazano u primjeru ispod. U posljednjem primjeru, radi praktičnosti, preskočit ćemo glavnu funkciju, 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; 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 se koristi za dohvaćanje transakcije koristeći heš transakcije. Heš transakcije se šalje na GetTransactionByHash kao parametri u formatu bytearray. Ključ ove funkcije je pretvaranje heš transakcije u hex formatu u heš transakcije u formatu niza bajtova. Ovo je važan korak. U suprotnom biste dobili grešku koja ukazuje da ne postoji blok sa hešom tog bloka. Uzmimo heš transakcije u heksadecimalnom formatu kao primjer da ga pretvorimo u format bytearray. Primjer izgleda ovako:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Prvo obrnite heš transakcije:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Programeri mogu postići ovaj korak pomoću alata za konverziju heksadecimalnog broja (mali endian) broja koji pruža SmartX.

Zatim konvertujte rezultirajući 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}

Ovo se može učiniti pomoću alata za konverziju niza bajtova stringova koji pruža SmartX. Konačno, konvertirajte rezultirajući niz bajtova u niz poput ovog:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Ispod je primjer funkcije GetTransactionByHash, koja uzima transakciju po 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 dobivanje visine transakcije koristeći heš transakcije. Uzmimo hash iz gornjeg 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 za preuzimanje ugovora putem hash ugovora. Proces konverzije heširanja ugovora je isti kao proces konverzije heš transakcije koji je gore spomenut.

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 dobivanje bloka. Postoje dva načina da dobijete određeni blok.

1. Nabavite blok po visini bloka:

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

2. Nabavite blok po blok heš:

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, GetTransactionCounti GetTransactionByIndex. Sredićemo ih jednog po jednog.

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

Programeri mogu koristiti funkciju GetTransactions da dohvate sve transakcije u datom 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 preuzimanje određene transakcije u datom 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

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

Posle reči

Blockchain & Block API je nezamjenjiv dio pametnih ugovora jer ga možete koristiti za upite blockchain podataka i blokiranje podataka u pametnim ugovorima. U budućim člancima ćemo razgovarati o tome kako koristiti preostale API-je i razumjeti kako oni komuniciraju s Ontology blockchainom.

Članak su preveli urednici Hashrate&Shares posebno za OntologyRussia. plakati

Jeste li programer? Pridružite se našoj tehničkoj zajednici na Diskord. Takođe, pogledajte Centar za programere na našoj web stranici, gdje možete pronaći alate za programere, dokumentaciju i još mnogo toga.

ontologija

izvor: www.habr.com

Dodajte komentar