Kā uzrakstīt viedkodu Python valodā Ontology tīklā. 1. daļa: Blockchain & Block API

Kā uzrakstīt viedo līgumu Python valodā Ontology tīklā. 1. daļa: Blockchain & Block API

Šis ir pirmais raksts no sērijas par viedu līgumu izveidi Python programmē valodā Ontology blokķēdē, izmantojot viedo līgumu izstrādes rīku. SmartX.

Šajā rakstā mēs sāksim iepazīšanos ar Ontology viedo līgumu API. Ontology viedo līgumu API ir sadalīts 7 moduļos:

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

Blockchain & Block API ir svarīgākā daļa no Ontology viedo līgumu sistēmas. Blockchain API atbalsta pamata blokķēdes pieprasījumu operācijas, piemēram, pašreizējā bloka augstuma saņemšanu, savukārt Block API atbalsta pamata bloka pieprasījumu operācijas, piemēram, pieprasījumu par darījumu skaitu konkrētajā blokā.

Sāksim!

Vispirms izveidojiet jaunu līgumu SmartX, un pēc tam sekojiet zemāk norādītajām instrukcijām.

1. Kā izmantot Blockchain API

Viedo līgumu funkciju saites ir identiskas Python saitiem. Jūs varat ievadīt attiecīgās funkcijas pēc vajadzības. Piemēram, zemāk minētā instrukcija ievada GetHeight — funkciju pašreizējā bloka augstuma iegūšanai, un GetHeader — funkciju bloka virsraksta iegūšanai.

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

GetHeight

GetHeight tiek izmantots, lai iegūtu pēdējā bloka secības numuru blokķēdē, kā parādīts zemāk minētajā piemērā. Pēdējā piemērā ērtības labad mēs izlaidīsim Main funkciju, bet jūs varat to pievienot, ja tas ir nepieciešams.

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 tiek izmantots, lai iegūtu bloka virsrakstu, kur parametra vērtība ir bloka secības numurs blokķēdē. Piemērs:

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 tiek izmantots, lai iegūtu darījumu, pamatojoties uz darījuma hešu. Darījuma hešs tiek nosūtīts GetTransactionByHash kā parametri bytearray formātā. Atslēga šai funkcijai ir darījuma heša pārvēršana hex formātā uz darījuma hešu bytearray formātā. Tas ir svarīgs solis. Pretējā gadījumā jūs saņemsiet kļūdu, kas norāda, ka nav bloka ar šo bloka hešu. Ņemsim darījuma hešu hex formātā kā piemēru, lai to pārvērstu bytearray formātā. Piemērs izskatās šādi:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Vispirms apgrieziet darījuma hešu:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Izstrādātāji šo soli var veikt, izmantojot Hex Number (little endian)Numura konvertēšanas rīku, ko piedāvā SmartX.

Tad pārveidojiet iegūto rezultātu par bytearray formātu:

{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 var izdarīt, izmantojot String Byte Array konvertēšanas rīku, ko piedāvā SmartX. Visbeidzot, pārveidojiet iegūto bytearray par līdzīgu virkni:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Zemāk ir piemērs funkcijai GetTransactionByHash, kas iegūst transakciju, pamatojoties uz transakcijas hash:

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 izmanto, lai iegūtu transakcijas augstumu, pamatojoties uz transakcijas hash. Ņemsim hash no iepriekšējā piemēra:

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

GetContract

Izstrādātāji var izmantot funkciju GetContract, lai iegūtu līgumu, pamatojoties uz līguma hash. Līguma hash konvertēšanas process ir līdzīgs transakcijas hash konvertēšanas procesam, kas minēts iepriekš.

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 izmanto, lai iegūtu bloku. Ir divi veidi, kā iegūt konkrētu bloku.

1. Iegūt bloku pēc bloka augstuma:

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

2. Iegūt bloku pēc bloka hash:

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

2. Kā izmantot Block API

Block API ir trīs pieejamas funkcijas: GetTransactions, GetTransactionCount, un GetTransactionByIndex. Mēs tās izskatīsim viena pēc otras.

GetTransactionCount

GetTransactionCount izmanto, lai iegūtu transakciju skaitu šajā 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

Izstrādātāji var izmantot funkciju GetTransactions, lai iegūtu visas transakcijas šajā blokā.

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 izmanto, lai iegūtu konkrētu transakciju šajā blokā.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # indekss sākas no 0.
    return tx

Pilns ceļvedis ir pieejams mūsu GitHub.

Pēcvārds

Blockchain & Block API ir neaizvietojama daļa no viedajiem līgumiem, jo jūs varat tos izmantot, lai pieprasītu blokķēdes un bloka datus viedajos līgumos. Nākamajos rakstos mēs apspriedīsim, kā izmantot pārējos API un izpētīsim to mijiedarbību ar Ontology blokķēdi.

Raksts ir pārtulkots Hashrate&Shares redakcijas speciāli OntologyRussia. klikšķiniet

Vai jūs esat izstrādātājs? Pievienojieties mūsu tehniskajai kopienai Discord. Turklāt ieskatieties Izstrādātāju centrā mūsu vietnē, kur varat atrast izstrādātāju rīkus, dokumentāciju un daudz ko citu.

Ontology

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster