Si të shkruani një kontratë inteligjente 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

Kjo është pjesa e parë në një seri mësimesh mbi krijimin e kontratave inteligjente Python në rrjetin e blockchain Ontology duke përdorur mjetin e zhvillimit të kontratave inteligjente. SmartX.

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

  1. Blockchain & Block API,
  2. API për kohën e ekzekutimit,
  3. API ruajtëse,
  4. API amtare,
  5. Përmirëso API-në,
  6. Execution Engine API dhe
  7. API-ja e thirrjeve statike dhe dinamike.

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

Le të fillojmë!

Së pari, krijoni një kontratë të re në SmartXdhe më pas ndiqni udhëzimet e mëposhtme.

1. Si të përdorni API Blockchain

Lidhjet me funksionet e kontratës inteligjente janë identike me lidhjet e Python. Ju mund të futni funksionet përkatëse sipas nevojës. Për shembull, deklarata e mëposhtme prezanton një funksion GetHeight për të marrë lartësinë aktuale të bllokut dhe një funksion GetHeader për të marrë kokën e bllokut.

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

GetHeight

GetHeight përdoret për të marrë numrin e sekuencës së fundit të bllokut në blockchain, siç tregohet në shembullin më poshtë. Në shembullin e fundit, ne do të heqim funksionin kryesor për lehtësi, 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ë kokën e bllokut, parametri është numri serial i 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ë një transaksion nëpërmjet një hash transaksioni. Hash-i i transaksionit dërgohet te GetTransactionByHash si parametra në formatin bytearray. Çelësi i këtij funksioni është konvertimi i hash-it të transaksionit në formatin hex në hash-in e transaksionit në formatin bytearray. Ky është një hap i rëndësishëm. Përndryshe, do të merrni një gabim që tregon se nuk ka asnjë bllok me atë hash blloku. Le të marrim hash-in e transaksionit në formatin hex si shembull për ta kthyer atë në formatin bytearray. Një shembull duket si ky:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Së pari, ktheni hash-in e transaksionit:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Zhvilluesit mund ta kryejnë këtë hap duke përdorur mjetin e konvertimit Hex Number(little endian)Number të ofruar nga SmartX.

Pastaj konvertojeni rezultatin 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 duke përdorur mjetin e konvertimit të String Byte Array të ofruar nga SmartX. Së fundi, konvertoni grupin e bytearrit që rezulton në një varg të ngjashëm:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Më poshtë është një shembull i një funksioni GetTransactionByHash që merr një transaksion duke përdorur hash-in e transaksionit:

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

GetTransaction Height

GetTransactionHeight përdoret për të marrë lartësinë e transaksionit nëpërmjet hash-it të transaksionit. Le të marrim hash nga shembulli i mësipërm:

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

Merr Kontratën

Zhvilluesit mund të përdorin funksionin GetContract për të marrë një kontratë përmes hash-it të kontratës. Procesi i konvertimit të hash-it të kontratës është i njëjtë me procesin e konvertimit të hash-it të transaksionit të përmendur më lart.

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 specifik.

1. Merrni lartësinë bllok sipas bllokut:

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

2. Merrni një hash bllok pas blloku:

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

Ekzistojnë tre funksione të disponueshme në Block API: GetTransactions, Get TransactionCountDhe GetTransactionByIndex. Do t'i zbërthejmë një nga një.

Get TransactionCount

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ë një bllok të caktuar.

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 specifik në një bllok të caktuar.

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

Një udhëzues i plotë mund të gjendet në faqen tonë GitHub.

pasthënje

API Blockchain & Block është një pjesë e domosdoshme e kontratave inteligjente pasi mund t'i përdorni ato për të kërkuar të dhëna blockchain dhe për të bllokuar të dhënat në kontratat inteligjente. Në artikujt e ardhshëm, ne do të diskutojmë se si të përdorim pjesën tjetër të API-ve dhe do të zbulojmë se si ato ndërveprojnë me zinxhirin e bllokut Ontology.

Artikulli u përkthye nga redaktorët e Hashrate&Shares posaçërisht për OntologyRussia. qaj

A jeni një zhvillues? Bashkohuni me komunitetin tonë të teknologjisë në Mosmarrëveshje. Gjithashtu, hidhini një sy Qendra e Zhvilluesve në faqen tonë të internetit, ku mund të gjeni mjete zhvilluesish, dokumentacion dhe më shumë.

ontologji

Burimi: www.habr.com

Shto një koment