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

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

Бул акылдуу келишимди иштеп чыгуу куралын колдонуу менен Ontology blockchain тармагында 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 bytearray форматында параметрлер катары. Бул функциянын ачкычы он алтылык форматтагы транзакция хэшти bytearray форматындагы транзакция хэшине айландыруу. Бул маанилүү кадам. Болбосо, сиз ошол блок хэш менен блок жок экенин көрсөткөн ката аласыз. Келгиле, аны bytearray форматына айландыруу үчүн мисал катары он алтылык форматтагы транзакция хэшти алалы. Мисал мындай көрүнөт:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Алгач транзакция хэшти тескери буруңуз:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Иштеп чыгуучулар бул кадамды SmartX тарабынан берилген Hex Number(little endian)Number айландыруу куралы аркылуу аткара алышат.

Андан кийин натыйжаны 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}

Бул 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

Иштеп чыгуучулар келишим хэш аркылуу келишимди алуу үчүн 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 акылдуу контракттардын ажырагыс бөлүгү болуп саналат, анткени сиз аны blockchain маалыматтарын сураш үчүн жана акылдуу келишимдердеги маалыматтарды бөгөттөө үчүн колдоно аласыз. Келечектеги макалаларда биз калган API'лерди кантип колдонууну талкуулайбыз жана алардын Ontology blockchain менен кантип иштешерин түшүнөбүз.

Макала Hashrate&Shares редакторлору тарабынан өзгөчө OntologyRussia үчүн которулган. ыйлоо

Сиз иштеп чыгуучусузбу? Биздин технологиялык коомчулукка кошулуңуз келишпестиктерге. Ошондой эле, карап көрүңүз Иштеп чыгуучу борбор биздин веб-сайтта, сиз иштеп чыгуучу куралдарын, документтерди жана башкаларды таба аласыз.

онтология

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster