Kumaha cara nyerat kontrak pinter dina Python dina jaringan Ontology. Bagian 1: Blockchain & Blok API

Kumaha cara nyerat kontrak pinter dina Python dina jaringan Ontology. Bagian 1: Blockchain & Blok API

Ieu mangrupikeun bagian munggaran dina séri tutorial ngeunaan nyiptakeun kontrak pinter Python dina jaringan blockchain Ontology nganggo alat pangembangan kontrak pinter. SmartX.

Dina tulisan ieu, urang bakal ngamimitian kenalan sareng API kontrak pinter Ontology. API kontrak pinter Ontology dibagi kana 7 modul:

  1. Blockchain & Blok API,
  2. API runtime,
  3. gudang API,
  4. API asli,
  5. Ningkatkeun API,
  6. Palaksanaan Engine API jeung
  7. Statis & Dinamis Telepon API.

Blockchain & Block API mangrupikeun bagian utama sistem kontrak pinter Ontology. API Blockchain ngadukung operasi query blockchain dasar, sapertos kéngingkeun jangkungna blok ayeuna, sedengkeun API Blok ngadukung operasi query blok dasar, sapertos naroskeun jumlah transaksi pikeun blok anu dipasihkeun.

Hayu urang ngamimitian!

Kahiji, nyieun kontrak anyar dina SmartXlajeng turutan parentah di handap.

1. Kumaha ngagunakeun Blockchain API

Tumbu ka fungsi kontrak pinter idéntik jeung Tumbu Python. Anjeun tiasa ngalebetkeun fungsi anu saluyu upami diperyogikeun. Contona, pernyataan di handap ieu ngenalkeun fungsi GetHeight pikeun meunangkeun jangkungna blok ayeuna, sarta fungsi GetHeader pikeun meunangkeun lulugu blok.

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

GetHeight

GetHeight dipaké pikeun meunangkeun angka runtuyan block panungtungan dina blockchain nu, sakumaha ditémbongkeun dina conto di handap ieu. Dina conto anu terakhir, urang bakal ngaleungitkeun fungsi Utama pikeun genah, tapi anjeun tiasa nambihanana upami diperyogikeun.

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 dipaké pikeun meunangkeun block header, parameter nyaéta nomer serial blok dina blockchain nu. conto:

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 dipaké pikeun meunangkeun transaksi ngaliwatan Hash transaksi. Hash urus dikirim ka GetTransactionByHash salaku parameter dina format bytearray. Konci pikeun fungsi ieu nyaéta ngarobih hash transaksi dina format hex ka hash transaksi dina format bytearray. Ieu mangrupikeun léngkah anu penting. Upami teu kitu, anjeun bakal meunang kasalahan anu nunjukkeun yén teu aya blok sareng blok Hash éta. Hayu urang nyandak Hash transaksi dina format hex sabagé conto pikeun ngarobih kana format bytearray. Hiji conto kasampak kawas kieu:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Kahiji, balikkeun hash transaksi:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Pamekar tiasa ngalaksanakeun léngkah ieu nganggo alat konvérsi Nomer Hex (saeutik endian) anu disayogikeun ku SmartX.

Lajeng ngarobah hasilna kana format bytearray:

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

Ieu tiasa dilakukeun nganggo alat konvérsi String Byte Array anu disayogikeun ku SmartX. Tungtungna, ngarobah bytearray hasilna kana string sarupa:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Ieu mangrupikeun conto fungsi GetTransactionByHash anu nyandak transaksi nganggo hash tina transaksi:

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 dipaké pikeun meunangkeun jangkungna transaksi via Hash transaksi. Hayu urang nyandak hash tina conto di luhur:

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

GetContract

Pamekar tiasa nganggo fungsi GetContract pikeun kéngingkeun kontrak ngalangkungan hash kontrak. Prosés konversi Hash kontrak sarua jeung prosés konversi Hash urus disebutkeun di luhur.

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 dipaké pikeun meunangkeun blok. Aya dua cara pikeun meunangkeun blok husus.

1. Meunang blok ku jangkungna blok:

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

2. Kéngingkeun blok per blok hash:

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

2. Kumaha ngagunakeun Blok API

Aya tilu fungsi anu sayogi dina Blok API: GetTransactions, GetTransactionCountjeung GetTransactionByIndex. Urang bakal ngarecahna hiji-hiji.

GetTransactionCount

GetTransactionCount dipaké pikeun meunangkeun jumlah transaksi pikeun blok dibikeun.

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

Pamekar tiasa nganggo fungsi GetTransactions pikeun nyandak sadaya transaksi dina blok anu dipasihkeun.

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 dipaké pikeun meunangkeun transaksi husus dina blok dibikeun.

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

Pitunjuk lengkep tiasa dipendakan dina kami GitHub.

afterword

Blockchain & Block API mangrupikeun bagian penting tina kontrak pinter sabab anjeun tiasa dianggo pikeun nyuhunkeun data blockchain sareng meungpeuk data dina kontrak pinter. Dina tulisan di handap ieu, urang bakal ngabahas kumaha cara ngagunakeun sesa API sareng terang kumaha aranjeunna berinteraksi sareng blockchain Ontology.

Tulisan ieu ditarjamahkeun ku éditor Hashrate&Shares khususna pikeun OntologyRussia. ceurik

Anjeun pamekar? Gabung komunitas tech kami di Discord. Ogé, nyandak katingal di Puseur pamekar dina situs wéb kami, dimana anjeun tiasa mendakan alat pamekar, dokuméntasi, sareng seueur deui.

Ontology

sumber: www.habr.com

Tambahkeun komentar