Ki jan yo ekri yon kontra entelijan nan Python sou rezo a Ontology. Pati 1: Blockchain & Block API

Ki jan yo ekri yon kontra entelijan nan Python sou rezo a Ontology. Pati 1: Blockchain & Block API

Sa a se premye pati nan yon seri atik edikatif sou kreye kontra entelijan nan Python sou rezo blockchain Ontology lè l sèvi avèk zouti devlopman kontra entelijan. SmartX.

Nan atik sa a, nou pral kòmanse konesans nou ak Ontology smart contract API. Ontology smart contract API divize an 7 modil:

  1. Blockchain & Block API,
  2. Runtime API
  3. Depo API
  4. API natif natal
  5. Mizajou API,
  6. Execution Engine API ak
  7. Statik & Dynamic API apèl.

Blockchain & Block API se pati prensipal sistèm kontra entelijan Ontology la. API Blockchain a sipòte operasyon rechèch blòk debaz yo, tankou jwenn wotè aktyèl la nan yon blòk, pandan y ap Blockchain a sipòte operasyon rechèch debaz blòk, tankou demann kantite tranzaksyon pou yon blòk bay yo.

An n kòmanse!

Pou kòmanse, kreye yon nouvo kontra nan SmartX, epi swiv enstriksyon ki anba yo.

1. Ki jan yo sèvi ak Blockchain API

Referans fonksyon kontra entelijan yo idantik ak referans Python. Ou ka antre nan fonksyon enpòtan jan sa nesesè. Pa egzanp, deklarasyon sa a prezante GetHeight, yon fonksyon pou jwenn wotè aktyèl yon blòk, ak GetHeader, yon fonksyon pou jwenn tit blòk la.

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

GetHeight

GetHeight yo itilize pou jwenn dènye nimewo sekans blòk nan blockchain la, jan yo montre nan egzanp ki anba a. Nan dènye egzanp lan, pou konvenyans, nou pral sote fonksyon prensipal la, men ou ka ajoute li si sa nesesè.

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 yo itilize pou jwenn tèt blòk la; paramèt la se nimewo seri blòk la nan blockchain la. Egzanp:

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 yo itilize pou rekipere yon tranzaksyon lè l sèvi avèk yon hash tranzaksyon. Se hash tranzaksyon an voye bay GetTransactionByHash kòm paramèt nan fòma bytearray. Kle nan fonksyon sa a se konvèti hash tranzaksyon an nan fòma hex nan hash tranzaksyon an nan fòma bytearray. Sa a se yon etap enpòtan. Sinon ou ta jwenn yon erè ki endike ke pa gen okenn blòk ak hash blòk sa a. Ann pran hash tranzaksyon an nan fòma hex kòm yon egzanp konvèti li nan fòma bytearray. Egzanp la sanble sa a:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Premye ranvèse tranzaksyon an:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Devlopè yo ka akonpli etap sa a lè l sèvi avèk zouti konvèsyon nimewo Hex (little endian) Nimewo SmartX bay.

Lè sa a, konvèti rezilta a nan fòma 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}

Sa a ka fè lè l sèvi avèk zouti konvèsyon String Byte Array ki ofri pa SmartX. Finalman, konvèti bytearray ki kapab lakòz nan yon fisèl tankou sa a:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Anba a se yon egzanp fonksyon GetTransactionByHash, ki pran yon tranzaksyon pa hash tranzaksyon an:

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 yo itilize pou jwenn wotè tranzaksyon an lè l sèvi avèk hash tranzaksyon an. Ann pran hash la nan egzanp ki anwo a:

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

GetContract

Devlopè yo ka itilize fonksyon GetContract pou rekipere yon kontra atravè yon hash kontra. Pwosesis konvèsyon hash kontra a se menm jan ak pwosesis konvèsyon tranzaksyon hash mansyone pi wo a.

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 yo itilize pou jwenn yon blòk. Gen de fason pou jwenn yon blòk espesifik.

1. Jwenn yon blòk pa wotè blòk:

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

2. Jwenn yon blòk pa blòk hash:

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

2. Kouman pou itilize Block API

Gen twa fonksyon ki disponib nan Block API: GetTransactions, GetTransactionCount, Ak GetTransactionByIndex. Nou pral regle yo youn pa youn.

GetTransactionCount

GetTransactionCount yo itilize pou jwenn kantite tranzaksyon pou yon blòk bay yo.

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

Devlopè yo ka itilize fonksyon GetTransactions pou rekipere tout tranzaksyon yo nan yon blòk bay yo.

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 yo itilize pou rekipere yon tranzaksyon espesifik nan yon blòk bay yo.

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

Ou ka jwenn gid konplè sou nou an GitHub.

Apreword

Blockchain & Block API se yon pati endispansab nan kontra entelijan paske ou ka sèvi ak li pou rechèch done blockchain ak bloke done nan kontra entelijan. Nan atik nan lavni, nou pral diskite sou fason yo sèvi ak API ki rete yo ak konprann ki jan yo kominike avèk blòk Ontology la.

Atik la te tradui pa editè yo nan Hashrate&Shares espesyalman pou OntologyRussia. kriye

Èske w se yon pwomotè? Antre nan kominote teknoloji nou an nan Dezakò. Epitou, pran yon gade nan Sant Developer sou sit entènèt nou an, kote ou ka jwenn zouti devlopè, dokiman, ak plis ankò.

Ontoloji

Sous: www.habr.com

Add nouvo kòmantè