Kuidas ontoloogiavõrgus Pythonis nutikat lepingut kirjutada. 1. osa: Blockchain & Block API

Kuidas ontoloogiavõrgus Pythonis nutikat lepingut kirjutada. 1. osa: Blockchain & Block API

See on esimene osa harivate artiklite sarjast, mis käsitleb nutikate lepingute loomist Pythonis ontoloogia plokiahela võrgus, kasutades nutikate lepingute arendustööriista SmartX.

Selles artiklis alustame tutvumist ontoloogia nutika lepingu API-ga. Ontoloogia nutika lepingu API on jagatud 7 mooduliks:

  1. Blockchain & Block API,
  2. Runtime API
  3. Storage API
  4. Native API
  5. Uuenda API,
  6. Execution Engine API ja
  7. Staatilise ja dünaamilise kõne API.

Blockchain & Block API on Ontology nutika lepingusüsteemi põhiosa. Blockchaini API toetab põhilisi plokiahela päringutoiminguid, näiteks ploki praeguse kõrguse saamist, samas kui Block API toetab põhilisi plokipäringu toiminguid, nagu näiteks antud ploki tehingute arvu päring.

Alustame!

Alustuseks looge uus leping SmartXja järgige allolevaid juhiseid.

1. Kuidas kasutada Blockchaini API-d

Nutikate lepingufunktsioonide viited on identsed Pythoni viidetega. Vajadusel saate sisestada asjakohaseid funktsioone. Näiteks järgmine lause tutvustab funktsiooni GetHeight, ploki praeguse kõrguse saamiseks ja GetHeader, ploki pealkirja hankimise funktsiooni.

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

GetHeight

GetHeighti kasutatakse plokiahela viimase ploki järjekorranumbri saamiseks, nagu on näidatud allolevas näites. Viimases näites jätame mugavuse huvides vahele põhifunktsiooni, kuid saate selle vajadusel lisada.

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

Ploki päise saamiseks kasutatakse GetHeaderit; parameetriks on ploki seerianumber plokiahelas. Näide:

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

GetTransactionByHashi kasutatakse tehingu toomiseks tehinguräsi abil. Tehingu räsi saadetakse aadressile GetTransactionByHash parameetritena bytearray formaadis. Selle funktsiooni võti on teisendada tehingu räsi kuueteistkümnendvormingus tehinguräsi bytearray-vormingus. See on oluline samm. Vastasel juhul saate tõrketeate, mis näitab, et selle ploki räsiga pole ühtegi plokki. Võtame näiteks kuueteistkümnendvormingus tehinguräsi, et teisendada see bytearray-vormingusse. Näide näeb välja selline:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Kõigepealt pöörake tehingu räsi ümber:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Arendajad saavad selle sammu teha SmartX-i pakutava Hex Number (little endian) numbrite teisendamise tööriista abil.

Seejärel teisendage saadud tulemus bytearray vormingusse:

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

Seda saab teha SmartX-i pakutava String Byte Array teisendustööriista abil. Lõpuks teisendage saadud bytearray selliseks stringiks:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Allpool on näide funktsioonist GetTransactionByHash, mis võtab tehingu tehingu räsi järgi:

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

GetTransactionHeight

GetTransactionHeighti kasutatakse tehingu kõrguse saamiseks tehingu räsi abil. Võtame räsi ülaltoodud näitest:

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

Hankige leping

Arendajad saavad lepingu räsi kaudu lepingu hankimiseks kasutada funktsiooni GetContract. Lepingu räsi teisendamise protsess on sama, mis ülalmainitud tehingu räsi teisendamise protsess.

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

Getblock

GetBlocki kasutatakse ploki saamiseks. Konkreetse ploki saamiseks on kaks võimalust.

1. Hankige plokk ploki kõrguse järgi:

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

2. Hankige plokkide kaupa räsi:

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

2. Kuidas kasutada Block API-t

Block API-s on saadaval kolm funktsiooni: GetTransactions, GetTransactionCountJa GetTransactionByIndex. Sorteerime need ükshaaval välja.

GetTransactionCount

GetTransactionCounti kasutatakse antud ploki tehingute arvu saamiseks.

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

Arendajad saavad kasutada funktsiooni GetTransactions, et tuua kõik antud ploki tehingud.

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

GetTransactionByIndexi kasutatakse antud plokis konkreetse tehingu toomiseks.

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

Täieliku juhendi leiate meie veebisaidilt GitHub.

järelsõna

Blockchain & Block API on nutikate lepingute asendamatu osa, kuna saate seda kasutada plokiahela andmete päringute tegemiseks ja andmete blokeerimiseks nutikates lepingutes. Järgmistes artiklites arutame, kuidas kasutada ülejäänud API-sid ja mõista, kuidas need ontoloogia plokiahelaga suhtlevad.

Artikli tõlkisid Hashrate&Sharesi toimetajad spetsiaalselt OntologyRussia jaoks. nutma

Kas olete arendaja? Liituge meie tehnikakogukonnaga aadressil Erimeelsused. Samuti vaadake Arendaja keskus meie veebisaidil, kust leiate arendajatööriistu, dokumentatsiooni ja palju muud.

Ontoloogia

Allikas: www.habr.com

Lisa kommentaar