Hogyan írjunk intelligens szerződést Pythonban az Ontológia hálózaton. 1. rész: Blockchain & Block API

Hogyan írjunk intelligens szerződést Pythonban az Ontológia hálózaton. 1. rész: Blockchain & Block API

Ez az első része a Python intelligens szerződések létrehozásáról szóló oktatóanyagok sorozatának az Ontology blokklánc hálózaton az intelligens szerződésfejlesztő eszköz használatával. SmartX.

Ebben a cikkben az Ontology smart contract API-val kezdjük az ismerkedést. Az Ontology intelligens szerződés API 7 modulra oszlik:

  1. Blockchain & Block API,
  2. futásidejű API,
  3. tárolási API,
  4. natív API,
  5. Frissítés API,
  6. Execution Engine API és
  7. Statikus és dinamikus hívás API.

A Blockchain & Block API az Ontology intelligens szerződéses rendszer fő része. A Blockchain API támogatja az alapvető blokklánc lekérdezési műveleteket, például az aktuális blokk magasságának lekérését, míg a Block API az alapvető blokklekérdezési műveleteket, például az adott blokkhoz tartozó tranzakciók számának lekérdezését.

Kezdjük el!

Először hozzon létre egy új szerződést SmartXmajd kövesse az alábbi utasításokat.

1. A Blockchain API használata

Az intelligens szerződéses funkciókra mutató hivatkozások megegyeznek a Python-hivatkozásokkal. Szükség szerint megadhatja a megfelelő funkciókat. Például a következő utasítás bemutat egy GetHeight függvényt az aktuális blokk magasságának lekéréséhez, és egy GetHeader függvényt a blokk fejlécének lekéréséhez.

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

GetHeight

A GetHeight a blokklánc utolsó blokksorszámának lekérésére szolgál, amint az az alábbi példában látható. Az utolsó példában a kényelem kedvéért elhagyjuk a Main funkciót, de szükség esetén hozzáadhatja.

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

A GetHeader a blokkfejléc lekérésére szolgál, a paraméter a blokk sorozatszáma a blokkláncban. Példa:

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

A GetTransactionByHash a tranzakció lekérésére szolgál tranzakciókivonattal. A tranzakció kivonatát a rendszer a következő címre küldi: GetTransactionByHash paraméterként bytearray formátumban. Ennek a funkciónak a kulcsa a hexadecimális formátumú tranzakciókivonat konvertálása bytearray formátumú tranzakciós hash-re. Ez egy fontos lépés. Ellenkező esetben hibaüzenetet kaphat, amely azt jelzi, hogy nincs blokk ezzel a blokk-kivonattal. Példaként vegyük a hexadecimális formátumú tranzakció hash-t a bytearray formátumba való konvertálásához. Egy példa így néz ki:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Először fordítsa meg a tranzakció kivonatát:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

A fejlesztők ezt a lépést a SmartX által biztosított Hex Number(little endian)Number konverziós eszközzel hajthatják végre.

Ezután konvertálja az eredményt bytearray formátumba:

{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}

Ezt a SmartX által biztosított String Byte Array konvertáló eszközzel lehet megtenni. Végül alakítsa át a kapott bytearray-t egy hasonló karakterláncra:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

A következő példa a GetTransactionByHash függvényre, amely a tranzakció kivonatát használja fel:

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

GetTransactionHeight

A GetTransactionHeight a tranzakció magasságának lekérésére szolgál a tranzakció hash-en keresztül. Vegyük a hash-t a fenti példából:

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

GetContract

A fejlesztők a GetContract funkció segítségével szerződést köthetnek a szerződés hash-jén keresztül. A szerződés hash-konverziós folyamata megegyezik a fent említett tranzakció-kivonat-konverziós folyamattal.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

GetBlock

A GetBlock blokk megszerzésére szolgál. Egy adott blokk megszerzésének két módja van.

1. Blokk lekérése blokkmagasság szerint:

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

2. Blokkenkénti hash lekérése:

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

2. A Blokk API használata

A Block API-ban három funkció érhető el: GetTransactions, GetTransactionCountÉs GetTransactionByIndex. Egyenként bontjuk le őket.

GetTransactionCount

A GetTransactionCount az adott blokkhoz tartozó tranzakciók számának lekérésére szolgál.

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

A fejlesztők a GetTransactions funkcióval lekérhetik az adott blokkban lévő összes tranzakciót.

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

A GetTransactionByIndex egy adott tranzakció lekérésére szolgál egy adott blokkban.

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

A teljes útmutató megtalálható nálunk GitHub.

utószó

A Blockchain & Block API az intelligens szerződések nélkülözhetetlen része, mivel segítségével blokklánc-adatokat kérhet, illetve blokkolhat adatokat az intelligens szerződésekben. A következő cikkekben megvitatjuk, hogyan kell használni a többi API-t, és megtudjuk, hogyan működnek együtt az Ontology blokklánccal.

A cikket a Hashrate&Shares szerkesztői fordították le kifejezetten az OntologyRussia számára. kiáltás

Ön fejlesztő? Csatlakozz technológiai közösségünkhöz a címen Viszály. Továbbá, vessen egy pillantást Fejlesztői Központ weboldalunkon, ahol fejlesztői eszközöket, dokumentációt és egyebeket találhat.

ontológia

Forrás: will.com

Hozzászólás