Онтология желісінде Python тілінде смарт келісімшартты қалай жазуға болады. 1-бөлім: Blockchain & Block API

Онтология желісінде Python тілінде смарт келісімшартты қалай жазуға болады. 1-бөлім: Blockchain & Block API

Бұл Ontology блокчейн желісінде смарт келісімшарттарды әзірлеу құралын пайдалана отырып, Python тілінде смарт келісім-шарттарды жасау туралы білім беру мақалаларының бірінші бөлігі. SmartX.

Бұл мақалада біз Ontology смарт келісімшарт API-мен танысуды бастаймыз. Ontology смарт келісімшарт API 7 модульге бөлінген:

  1. Blockchain & Block API,
  2. Runtime API
  3. Storage API
  4. Native API
  5. API жаңартуы,
  6. Execution Engine API және
  7. Static & Dynamic Call API.

Blockchain & Block API - Ontology смарт келісімшарт жүйесінің негізгі бөлігі. Blockchain API блоктың ағымдағы биіктігін алу сияқты негізгі блокчейн сұрау операцияларын қолдайды, ал Block API берілген блок үшін транзакциялар санын сұрау сияқты негізгі блок сұрау операцияларын қолдайды.

Бастайық!

Бастау үшін жаңа келісім-шарт жасаңыз SmartX, содан кейін төмендегі нұсқауларды орындаңыз.

1. Blockchain API қолдану жолы

Ақылды келісімшарт функциясының сілтемелері Python сілтемелерімен бірдей. Қажет болса, сәйкес функцияларды енгізуге болады. Мысалы, келесі мәлімдеме GetHeight, блоктың ағымдағы биіктігін алу функциясын және GetHeader, блоктың тақырыбын алу функциясын ұсынады.

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

GetHeight

GetHeight төмендегі мысалда көрсетілгендей блокчейндегі соңғы блок реттік нөмірін алу үшін пайдаланылады. Соңғы мысалда ыңғайлы болу үшін біз Негізгі функцияны өткізіп жібереміз, бірақ қажет болса, оны қосуға болады.

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 блок тақырыбын алу үшін пайдаланылады; параметр блокчейндегі блоктың сериялық нөмірі болып табылады. Мысалы:

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 транзакция хэшін пайдаланып транзакцияны алу үшін пайдаланылады. Транзакция хэші келесіге жіберіледі GetTransactionByHash байт жиым пішіміндегі параметрлер ретінде. Бұл функцияның кілті он алтылық форматтағы транзакция хэшін байт жиым пішіміндегі транзакция хэшіне түрлендіру болып табылады. Бұл маңызды қадам. Әйтпесе, бұл блок хэшімен блок жоқ екенін көрсететін қате аласыз. Оны байт жиым пішіміне түрлендіру үшін мысал ретінде он алтылық форматтағы транзакция хэшін алайық. Мысал келесідей көрінеді:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Алдымен транзакция хэшін кері қайтарыңыз:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Әзірлеушілер бұл қадамды SmartX ұсынған Hex Number(little endian)Number түрлендіру құралы арқылы орындай алады.

Содан кейін алынған нәтижені байт жиым пішіміне түрлендіріңіз:

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

Мұны SmartX ұсынған String Byte Array түрлендіру құралы арқылы жасауға болады. Соңында, алынған байт массивін келесідей жолға түрлендіріңіз:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Төменде транзакция хэш арқылы транзакцияны қабылдайтын GetTransactionByHash функциясының мысалы берілген:

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 транзакция хэшін пайдаланып транзакция биіктігін алу үшін пайдаланылады. Жоғарыдағы мысалдағы хэшті алайық:

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

Келісімшарт алыңыз

Әзірлеушілер келісім-шарт хэші арқылы келісім-шартты алу үшін GetContract функциясын пайдалана алады. Келісім-шарт хэшін түрлендіру процесі жоғарыда аталған транзакция хэшін түрлендіру процесімен бірдей.

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 блокты алу үшін қолданылады. Белгілі бір блокты алудың екі жолы бар.

1. Блок биіктігі бойынша блок алыңыз:

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

2. Блок хэш бойынша блок алыңыз:

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

2. Block API қолдану жолы

Block API ішінде үш қолжетімді функция бар: GetTransactions, GetTransactionCountмен GetTransactionByIndex. Біз оларды бір-бірден ажыратамыз.

GetTransactionCount

GetTransactionCount берілген блок үшін транзакциялар санын алу үшін пайдаланылады.

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

Әзірлеушілер GetTransactions функциясын берілген блоктағы барлық транзакцияларды шығарып алу үшін пайдалана алады.

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 берілген блокта белгілі бір транзакцияны алу үшін пайдаланылады.

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

Толық нұсқаулықты біздің сайттан табуға болады GitHub.

Кейінгі сөз

Blockchain & Block API смарт келісім-шарттардың ажырамас бөлігі болып табылады, өйткені оны блокчейн деректерін сұрау және смарт келісімшарттардағы деректерді блоктау үшін пайдалануға болады. Болашақ мақалаларда біз қалған API интерфейстерін қалай пайдалану керектігін талқылаймыз және олардың Ontology блокчейнімен қалай әрекеттесетінін түсінеміз.

Мақаланы Hashrate&Shares редакторлары әсіресе OntologyRussia үшін аударған. нұқыңыз

Сіз әзірлеушісіз бе? Біздің технологиялық қауымдастыққа қосылыңыз Арасындағы айырмашылық. Сондай-ақ, қараңыз Әзірлеушілер орталығы әзірлеуші ​​құралдарын, құжаттаманы және т.б. таба алатын веб-сайтымызда.

Онтология

Ақпарат көзі: www.habr.com

пікір қалдыру