Nola idatzi kontratu adimendun bat Python-en Ontology sarean. 1. zatia: Blockchain eta Block API

Nola idatzi kontratu adimendun bat Python-en Ontology sarean. 1. zatia: Blockchain eta Block API

Hau da Ontology blockchain sarean Python kontratu adimendunak sortzeko tutorial batzuen lehen zatia, kontratu adimendunen garapenerako tresna erabiliz. SmartX.

Artikulu honetan, Ontology smart contract APIa ezagutzen hasiko gara. Ontology smart contract APIa 7 modulutan banatzen da:

  1. Blockchain eta Block API,
  2. runtime APIa,
  3. biltegiratze APIa,
  4. jatorrizko APIa,
  5. Berritu APIa,
  6. Execution Engine APIa eta
  7. Dei estatiko eta dinamikoko APIa.

Blockchain & Block API Ontology kontratu adimendunen sistemaren zati nagusia da. Blockchain API-k bloke-katearen oinarrizko kontsulta-eragiketak onartzen ditu, hala nola, uneko blokearen altuera lortzea, eta Block API-k blokeen oinarrizko kontsulta-eragiketak onartzen ditu, hala nola bloke jakin baterako transakzio kopurua kontsultatzea.

Has gaitezen!

Lehenik eta behin, kontratu berri bat sortu SmartXeta gero jarraitu beheko argibideak.

1. Nola erabili Blockchain APIa

Kontratu adimendunen funtzioetarako estekak Python-en esteken berdinak dira. Dagozkion funtzioak sar ditzakezu behar bezala. Adibidez, hurrengo adierazpenak GetHeight funtzio bat sartzen du uneko blokearen altuera lortzeko, eta GetHeader funtzio bat blokearen goiburua lortzeko.

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

LortuAltuera

GetHeight bloke-katearen azken bloke-sekuentzia zenbakia lortzeko erabiltzen da, beheko adibidean erakusten den moduan. Azken adibidean, Main funtzioa alde batera utziko dugu erosotasunerako, baina behar izanez gero gehi dezakezu.

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 blokearen goiburua lortzeko erabiltzen da, parametroa blokearen serie zenbakia da. Adibidea:

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 transakzio hash baten bidez transakzio bat lortzeko erabiltzen da. Transakzio-hash-a helbidera bidaltzen da GetTransactionByHash bytearray formatuan parametro gisa. Funtzio honen gakoa transakzio-hash-a hex formatuan transakzio-hash-a bytearray formatuan bihurtzea da. Hau urrats garrantzitsua da. Bestela, bloke hash horrekin blokerik ez dagoela adierazten duen errore bat jasoko zenuke. Har dezagun transakzio hash-a hex formatuan adibide gisa bytearray formatura bihurtzeko. Adibide bat honelakoa da:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Lehenik eta behin, alderantzikatu transakzio-hash-a:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Garatzaileek urrats hau egin dezakete SmartX-ek emandako Hex Number(little endian)Number bihurtzeko tresna erabiliz.

Ondoren, bihurtu emaitza bytearray formatura:

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

Hau SmartX-ek eskaintzen duen String Byte Array bihurtzeko tresna erabiliz egin daiteke. Azkenik, bihurtu sortutako bytearray antzeko kate batera:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Honako hau da GetTransactionByHash funtzioaren adibide bat, transakzioaren hash-a erabiliz transakzio bat hartzen duena:

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

LortuTransactionHeight

GetTransactionHeight transakzioen altuera lortzeko erabiltzen da transakzio hash bidez. Har dezagun goiko adibideko hash-a:

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

Lortu Kontratua

Garatzaileek GetContract funtzioa erabil dezakete kontratuaren hash bidez kontratu bat lortzeko. Kontratuaren hash bihurtzeko prozesua goian aipatutako transakzio hash bihurtzeko prozesuaren berdina da.

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 bloke bat lortzeko erabiltzen da. Bloke zehatz bat lortzeko bi modu daude.

1. Lortu blokez bloke altuera:

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

2. Lortu blokez bloke hash bat:

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

2. Nola erabili Block API

Block APIan hiru funtzio daude eskuragarri: LortuTransakzioak, LortuTransactionCountEta GetTransactionByIndex. Banan-banan banatuko ditugu.

LortuTransactionCount

GetTransactionCount bloke jakin bateko transakzio kopurua lortzeko erabiltzen da.

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

LortuTransakzioak

Garatzaileek GetTransactions funtzioa erabil dezakete bloke jakin bateko transakzio guztiak lortzeko.

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 bloke jakin batean transakzio zehatz bat lortzeko erabiltzen da.

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

Gida osoa gure webgunean aurki dezakezu GitHub.

afterword

Blockchain & Block APIa kontratu adimendunen ezinbesteko zati bat da, blokeo-katearen datuak eskatzeko eta kontratu adimendunetan datuak blokeatzeko erabil ditzakezulako. Etorkizuneko artikuluetan, gainerako APIak nola erabili eta Ontology blockchain-ekin nola elkarreragiten duten ezagutuko dugu.

Artikulua Hashrate&Shares-eko editoreek itzuli dute bereziki OntologyRussiarako. negar egin

Garatzailea al zara? Sartu gure komunitate teknologikoa hemen discord. Gainera, begiratu Garatzaile Zentroa gure webgunean, garatzaileentzako tresnak, dokumentazioa eta abar aurki ditzakezun.

Ontologia

Iturria: www.habr.com

Gehitu iruzkin berria