Hogyan írjunk okosszerződést Pythonban az Ontology hálózaton. 1. rész: Blockchain & Block API

Hogyan írjunk okos szerződést Python nyelven az Ontology hálózaton. 1. rész: Blockchain & Block API

Ez az első része a sorozatnak, amely oktató cikkeket tartalmaz az Ontology blokkláncon végrehajtandó okosszerződések Python nyelvben történő létrehozásáról, okosszerződés-fejlesztő eszköz segítségével. SmartX.

Ebben a cikkben az Ontology okosszerződés API-val való ismerkedéssel kezdjük. Az Ontology okosszerződés API-ja 7 modulra oszlik:

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

A Blockchain & Block API az Ontology okosszerződés rendszerének alapvető része. A Blockchain API támogatja az alapvető blokklánc-lekérdezési műveleteket, mint például az aktuális blokk magasságának lekérése, míg a Block API az alapvető blokklekérdezési műveleteket támogatja, mint például egy adott blokk tranzakcióinak számának lekérdezését.

Kezdjünk hozzá!

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

1. Hogyan használjuk a Blockchain API-t

Az okosszerződések funkcióira mutató hivatkozások azonosak a Python hivatkozásokkal. Az Ön igényei szerint behelyettesítheti a megfelelő funkciókat. Például az alábbi utasítás beviszi a GetHeight – funkciót az aktuális blokk magasságának lekérésére, és a GetHeader – funkciót a blokk fejlécének lekérésére.

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

GetHeight

A GetHeight használata a blokklánc legutolsó blokk sorrendi számának lekérésére, ahogy az alábbi példában látható. Az utolsó példa kedvéért kihagyjuk 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 blokk fejlécének lekérésére szolgál, a paraméter a blokk sorrendi száma a blokkláncon. 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ó megszerzésére szolgál a tranzakciós hash alapján. A tranzakciós hash-t a GetTransactionByHash paraméterekként küldjük bytearray formátumban. A funkció kulcsa a tranzakciós hash hex formátumú konvertálása bytearray formátumba. Ez fontos lépés. Különben hibát kapna, amely azt jelzi, hogy nincs blokk ezzel a hash-blokkal. Vegyünk egy hex formátumú tranzakciós hash-t példának, hogy átkonvertáljuk bytearray formátumba. A példa a következőképpen néz ki:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Először is, fordítsa meg a tranzakciós hash-t:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

A fejlesztők ezt a lépést a SmartX által biztosított Hex Number (kis endian) Szám konvertáló eszközzel tudják végrehajtani.

Ezután alakítsa át az így kapott 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 átalakító eszközzel teheti meg. Végül konvertálja az így kapott bytearray-t hasonló stringgé:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Íme egy példa a GetTransactionByHash függvényre, amely a tranzakciót a tranzakció hash alapján szerzi meg:

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-t a tranzakció magasságának megszerzésére használják a tranzakció hash alapján. Vegyük a fenti példából származó hash-t:

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 függvényt használhatják a szerződés hash alapján történő megszerzésére. A szerződés hash átalakításának folyamata megegyezik a fent említett tranzakció hash átalakításával.

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 a blokk megszerzésére használható. Két módja van egy adott blokk megszerzésének.

1. Blokk megszerzése a blokk magassága alapján:

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

2. Blokk megszerzése a blokk hash alapján:

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

2. Hogyan használjuk a Block API-t

Három elérhető függvény található a Block API-ban: GetTransactions, GetTransactionCount, és a GetTransactionByIndex. Ezért ezeket egyenként megvitatjuk.

GetTransactionCount

A GetTransactionCount-t a tranzakciók számának megszerzésére használják az adott blokkra vonatkozóan.

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 használhatják a GetTransactions funkciót, hogy megkapják az összes tranzakciót a megadott blokkban.

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 funkciót használjuk egy adott tranzakció lekérésére a megadott blokkban.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # az index 0-tól kezdődik.
    return tx

A teljes útmutatót a weboldalunkon találhatja. GitHub.

Utószó

A Blockchain & Block API elengedhetetlen része a okos szerződéseknek, mivel ezeket használhatja blockchain és blokkadatok lekérésére az okos szerződésekben. A következő cikkekben megvitatjuk, hogyan lehet használni a többi API-t, és megvizsgáljuk azok interakcióját az Ontology blockchain-nal.

A cikket a Hashrate&Shares szerkesztősége fordította az OntologyRussia számára. kattintás

Fejlesztő vagy? Csatlakozz a technikai közösségünkhöz a Discord. Ezen kívül nézd meg a Fejlesztőközpontot a weboldalunkon, ahol fejlesztői eszközöket, dokumentációt és sok mást találhat.

Ontology

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster