Si të shkruani një kontratë të zgjuar në Python në rrjetin Ontology. Pjesa 1: Blockchain & Block API

Si të shkruani një kontratë inteligjente në Python në rrjetin Ontology. Pjesa 1: Blockchain & Block API

Ky është pjesa e parë e një serie artikujsh mësimorë për krijimin e kontratave inteligjente në Python në rrjetin blockchain Ontology duke përdorur mjetin për zhvillimin e kontratave inteligjente. SmartX.

Në këtë artikull ne do të fillojmë njohjen me API-në e kontratës inteligjente Ontology. API-ja e kontratës inteligjente Ontology ndahen në 7 module:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API dhe
  7. Static & Dynamic Call API.

Blockchain & Block API është pjesa kryesore e sistemit të kontratave inteligjente Ontology. Blockchain API mbështet operacionet bazë të kërkesave blockchain, siç është marrja e lartësisë aktuale të bllokut, ndërsa Block API mbështet operacionet bazë të kërkesave për bllokun, siç është kërkimi i numrit të transaksioneve për një bllok të caktuar.

Le të fillojmë!

Së pari krijoni një kontratë të re në SmartX, dhe pastaj ndiqni udhëzimet më poshtë.

1. Si të përdorni Blockchain API

Referencat pĂ«r funksionet e kontratave inteligjente janĂ« identike me ato nĂ« Python. Ju mund tĂ« e shkruani funksionet pĂ«rkatĂ«se sipas nevojĂ«s. PĂ«r shembull, udhĂ«zimi mĂ« poshtĂ« thĂ«rret GetHeight— funksionin pĂ«r tĂ« marrĂ« lartĂ«sinĂ« aktuale tĂ« bllokut, dhe GetHeader— funksionin pĂ«r tĂ« marrĂ« titullin e bllokut.

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

GetHeight

GetHeight përdoret për të marrë numrin e fundit rendit të bllokut në blockchain, siç ilustrohet në shembullin më poshtë. Në këtë shembull, për thjeshtësi do ta anashkalojmë funksionin Main, por ju mund ta shtoni atë nëse është e nevojshme.

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 përdoret për të marrë titullin e bllokut, parametri është numri rendit të bllokut në blockchain. Shembull:

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 pĂ«rdoret pĂ«r tĂ« marrĂ« transaksionin pĂ«rmes hash-it tĂ« transaksionit. Hash-i i transaksionit dĂ«rgohet nĂ« GetTransactionByHash si parametra nĂ« formatin bytearray. ÇelĂ«si pĂ«r kĂ«tĂ« funksion Ă«shtĂ« konvertimi i hash-it tĂ« transaksionit nga formati hex nĂ« hash-in e transaksionit nĂ« formatin bytearray. Ky Ă«shtĂ« njĂ« hap i rĂ«ndĂ«sishĂ«m. NĂ« tĂ« kundĂ«rt, do tĂ« merrni njĂ« gabim qĂ« tregon se nuk ka bllok me njĂ« hash tĂ« tillĂ«. Le tĂ« marrim si shembull hash-in e transaksionit nĂ« formatin hex, pĂ«r ta konvertuar atĂ« nĂ« formatin bytearray. Shembulli duket si mĂ« poshtĂ«:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Së pari, kthejeni përmbys hash-in e transaksionit:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Zhvilluesit mund të realizojnë këtë hap me anë të mjetit të konvertimit Hex Number(little endian)Number, i cili ofrohet nga SmartX.

Pastaj, konvertoni rezultatin e marrë në formatin 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}

Kjo mund të bëhet me anë të mjetit të konvertimit String Byte Array, i cili ofrohet nga SmartX. Së fundmi, konvertoni bytearray që keni marrë në një varg të tillë:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Më poshtë është një shembull funksioni GetTransactionByHash, i cili merr transaksionin përmes hash-it të transaksionit:

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 përdoret për të marrë lartësinë e transaksionit përmes hash-it të transaksionit. Le të marrim hash-in nga shembulli më sipër:

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

GetContract

Zhvilluesit mund të përdorin funksionin GetContract për të marrë kontratën përmes hash-it të kontratës. Procesi i konvertimit të hash-it të kontratës është i ngjashëm me procesin e konvertimit të hash-it të transaksionit, i cili përmendet më sipër.

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 përdoret për të marrë një bllok. Ka dy mënyra për të marrë një bllok të caktuar.

1. Merrni një bllok sipas lartësisë së bllokut:

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

2. Merrni një bllok sipas hash-it të bllokut:

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

2. Si të përdorni Block API

Ka tre funksione të disponueshme në Block API: GetTransactions, GetTransactionCount, dhe GetTransactionByIndex. Ne do t'i shqyrtojmë ato një nga një.

GetTransactionCount

GetTransactionCount përdoret për të marrë numrin e transaksioneve për një bllok të caktuar.

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

Zhvilluesit mund të përdorin funksionin GetTransactions për të marrë të gjitha transaksionet në këtë bllok.

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 përdoret për të marrë një transaksion të caktuar në këtë bllok.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # indeksi fillon nga 0.
    return tx

Udhezimi i plotë mund të gjendet në GitHub.

Pasthënie

Blockchain & Block API është një pjesë thelbësore e kontratave inteligjente, pasi mund të përdorni ato për të kërkuar të dhëna nga blockchain dhe të dhëna blloku në kontratat inteligjente. Në artikujt e ardhshëm do të diskutojmë se si të përdorim API të tjera dhe do të zbulojmë ndërveprimin e tyre me blockchain-in Ontology.

Artikulli është përkthyer nga redaksia Hashrate&Shares ekskluzivisht për OntologyRussia. klik

Jeni zhvillues? Bashkohuni me komunitetin tonë teknik në Discord. Për më tepër, shikoni në Qendrën e zhvilluesve në faqen tonë, ku mund të gjeni mjete zhvilluesi, dokumentacion dhe shumë më tepër.

Ontology

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster