Онтологийн сүлжээнд 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. Хадгалах API
  4. Төрөлх API
  5. API шинэчлэх,
  6. Execution Engine API болон
  7. Статик ба динамик дуудлагын 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 нь доорх жишээнд үзүүлсэн шиг блокчейн дэх хамгийн сүүлийн блок дарааллын дугаарыг авахад хэрэглэгддэг. Сүүлийн жишээнд тав тухтай байдлыг хангах үүднээс бид Үндсэн функцийг алгасах болно, гэхдээ шаардлагатай бол та үүнийг нэмж болно.

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 форматаар параметр болгон. Энэ функцын гол түлхүүр нь hex формат дахь гүйлгээний хэшийг bytearray форматаар гүйлгээний хэш болгон хувиргах явдал юм. Энэ бол чухал алхам юм. Үгүй бол та тухайн блок хэштэй блок байхгүй гэсэн алдаа гарах болно. Үүнийг bytearray формат руу хөрвүүлэхийн тулд hex форматын гүйлгээний хэшийг жишээ болгон авч үзье. Жишээ нь дараах байдлаар харагдаж байна.

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 функцийг ашиглан гэрээг хэшээр дамжуулан авах боломжтой. Гэрээний хэш хөрвүүлэх үйл явц нь дээр дурдсан гүйлгээний хэш хөрвүүлэлтийн процесстой ижил байна.

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-д гурван боломжит функц байдаг: Гүйлгээ авах, 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 функцийг ашиглан тухайн блок дахь бүх гүйлгээг татаж авах боломжтой.

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 сэтгүүлийн редакторууд ялангуяа Орос улсад онтологиод зориулан орчуулсан. дарна уу

Та хөгжүүлэгч мөн үү? Манай технологийн нийгэмлэгт нэгдээрэй Discord. Бас нэг үзээрэй Хөгжүүлэгчийн төв Манай вэбсайтаас та хөгжүүлэгчийн хэрэгсэл, баримт бичиг болон бусад зүйлийг олж авах боломжтой.

Ontology

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх