Kā uzrakstīt viedo līgumu Python ontoloģijas tīklā. 1. daļa: Blockchain un Block API

Kā uzrakstīt viedo līgumu Python ontoloģijas tīklā. 1. daļa: Blockchain un Block API

Šī ir pirmā daļa no apmācību sērijas par Python viedo līgumu izveidi Ontology blokķēdes tīklā, izmantojot viedo līgumu izstrādes rīku. SmartX.

Šajā rakstā mēs sāksim iepazīšanos ar Ontology viedo līgumu API. Ontoloģijas viedā līguma API ir sadalīta 7 moduļos:

  1. Blockchain & Block API,
  2. izpildlaika API,
  3. krātuves API,
  4. vietējā API,
  5. jaunināšanas API,
  6. Execution Engine API un
  7. Statiskā un dinamiskā zvana API.

Blockchain & Block API ir Ontology viedo līgumu sistēmas galvenā daļa. Blockchain API atbalsta pamata blokķēdes vaicājumu darbības, piemēram, pašreizējā bloka augstuma noteikšanu, savukārt Block API atbalsta pamata bloku vaicājumu darbības, piemēram, vaicājumu par darījumu skaitu konkrētam blokam.

Sāksim!

Vispirms izveidojiet jaunu līgumu SmartXun pēc tam izpildiet tālāk sniegtos norādījumus.

1. Kā lietot Blockchain API

Saites uz viedo līgumu funkcijām ir identiskas Python saitēm. Ja nepieciešams, varat ievadīt atbilstošās funkcijas. Piemēram, šis paziņojums ievieš funkciju GetHeight, lai iegūtu pašreizējo bloka augstumu, un GetHeader funkcija, lai iegūtu bloka galveni.

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

GetHeight

GetHeight izmanto, lai iegūtu pēdējo bloka kārtas numuru blokķēdē, kā parādīts tālāk esošajā piemērā. Pēdējā piemērā mēs izlaidīsim funkciju Galvenā, taču, ja nepieciešams, varat to pievienot.

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 galveni, parametrs ir bloka sērijas 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, izmantojot darījumu jaucējfunkciju. Darījuma hash tiek nosūtīts uz GetTransactionByHash kā parametri bytearray formātā. Šīs funkcijas galvenais uzdevums ir transakcijas hash konvertēšana hex formātā uz transakcijas jaucējfunkciju bytearray formātā. Tas ir svarīgs solis. Pretējā gadījumā jūs saņemsit kļūdu, kas norāda, ka nav neviena bloka ar šo bloka jaucējfunkciju. Ņemsim transakcijas jaucējfunkciju hex formātā kā piemēru, lai to pārvērstu bytearray formātā. Piemērs izskatās šādi:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Vispirms apgrieziet darījuma jaucējkodu:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Izstrādātāji var veikt šo darbību, izmantojot SmartX nodrošināto Hex Number (little endian) skaitļu konvertēšanas rīku.

Pēc tam konvertējiet rezultātu bytearray formātā:

{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 SmartX nodrošināto String Byte Array konvertēšanas rīku. Visbeidzot konvertējiet iegūto baitu masīvu par līdzīgu virkni:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Tālāk ir parādīts funkcijas GetTransactionByHash piemērs, kas veic darījumu, izmantojot darījuma jaucējkodu:

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 tiek izmantots, lai iegūtu darījuma augstumu, izmantojot darījuma jaucējfunkciju. Ņemsim hash no iepriekš minētā 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

Saņemt līgumu

Izstrādātāji var izmantot funkciju GetContract, lai iegūtu līgumu, izmantojot līguma jaucējkodu. Līguma jaucējkoda konvertēšanas process ir tāds pats kā iepriekš minētais darījuma jaucējkoda konvertēšanas process.

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

1. Saņemt bloku pēc bloka augstuma:

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

2. Iegūstiet 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

Bloķēšanas API ir pieejamas trīs funkcijas: GetTransactions, GetTransactionCountUn GetTransactionByIndex. Mēs tos sadalīsim pa vienam.

GetTransactionCount

GetTransactionCount tiek izmantots, lai iegūtu konkrēta bloka darījumu skaitu.

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 visus darījumus noteiktā 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 darījumu noteiktā blokā.

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

Pilnu rokasgrāmatu var atrast mūsu vietnē GitHub.

Pēcvārds

Blockchain & Block API ir neaizstājama viedo līgumu sastāvdaļa, jo varat tos izmantot, lai pieprasītu blokķēdes datus un bloķētu datus viedos līgumos. Nākamajos rakstos mēs apspriedīsim, kā izmantot pārējās API, un uzzināsim, kā tās mijiedarbojas ar Ontoloģijas blokķēdi.

Rakstu speciāli OntologyRussia tulkojuši Hashrate&Shares redaktori. raudāt

Vai jūs esat izstrādātājs? Pievienojieties mūsu tehnoloģiju kopienai vietnē Neatbilstība. Apskatiet arī Izstrādātāju centrs mūsu vietnē, kur varat atrast izstrādātāju rīkus, dokumentāciju un daudz ko citu.

Ontoloģiju

Avots: www.habr.com

Pievieno komentāru