Ontologiya tarmog'ida Python-da aqlli shartnomani qanday yozish mumkin. 1-qism: Blockchain & Block API

Ontologiya tarmog'ida Python-da aqlli shartnomani qanday yozish mumkin. 1-qism: Blockchain & Block API

Bu aqlli kontraktni ishlab chiqish vositasidan foydalangan holda Ontology blokcheyn tarmog'ida Python aqlli shartnomalarini yaratish bo'yicha bir qator o'quv qo'llanmalarining birinchi qismi. SmartX.

Ushbu maqolada biz Ontology smart contract API bilan tanishishni boshlaymiz. Ontology smart contract API 7 modulga bo'lingan:

  1. Blockchain & Block API,
  2. ish vaqti API,
  3. saqlash API,
  4. mahalliy API,
  5. APIni yangilash,
  6. Execution Engine API va
  7. Statik va dinamik qo'ng'iroqlar API.

Blockchain & Block API Ontology aqlli kontrakt tizimining asosiy qismidir. Blockchain API joriy blok balandligini olish kabi asosiy blokcheyn so'rovlarini qo'llab-quvvatlaydi, Block API esa ma'lum blok uchun tranzaktsiyalar sonini so'rash kabi asosiy blok so'rovlarini qo'llab-quvvatlaydi.

Qani boshladik!

Birinchidan, yangi shartnoma tuzing SmartXva keyin quyidagi ko'rsatmalarga amal qiling.

1. Blockchain API dan qanday foydalanish kerak

Smart kontrakt funktsiyalariga havolalar Python havolalari bilan bir xil. Agar kerak bo'lsa, tegishli funktsiyalarni kiritishingiz mumkin. Masalan, quyidagi bayonot joriy blok balandligini olish uchun GetHeight funksiyasini va blok sarlavhasini olish uchun GetHeader funksiyasini taqdim etadi.

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

GetHeight

GetHeight quyidagi misolda ko'rsatilganidek, blokcheyndagi oxirgi blok tartib raqamini olish uchun ishlatiladi. Oxirgi misolda biz qulaylik uchun Asosiy funksiyani o'tkazib yuboramiz, lekin agar kerak bo'lsa, uni qo'shishingiz mumkin.

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 blok sarlavhasini olish uchun ishlatiladi, parametr blokcheyndagi blokning seriya raqamidir. Misol:

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 tranzaksiya xeshi orqali tranzaktsiyani olish uchun ishlatiladi. Tranzaksiya xeshi yuboriladi GetTransactionByHash bytearray formatidagi parametrlar sifatida. Bu funksiyaning kaliti hex formatidagi tranzaksiya xeshini bytearray formatidagi tranzaksiya xeshiga aylantirishdir. Bu muhim qadamdir. Aks holda, siz ushbu blok xeshi bilan blok yo'qligini ko'rsatadigan xatoga duch kelasiz. Uni bytearray formatiga aylantirish uchun misol tariqasida hex formatidagi tranzaksiya xeshini olaylik. Misol quyidagicha ko'rinadi:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Birinchidan, tranzaksiya xeshini o'zgartiring:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Ishlab chiquvchilar ushbu bosqichni SmartX tomonidan taqdim etilgan Hex Number(kichik endian)Raqamni o'zgartirish vositasi yordamida bajarishlari mumkin.

Keyin natijani bytearray formatiga aylantiring:

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

Buni SmartX tomonidan taqdim etilgan String Bayte Array konvertatsiya qilish vositasi yordamida amalga oshirish mumkin. Nihoyat, natijada olingan bayt-arrayni o'xshash qatorga aylantiring:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Quyida tranzaksiya xesh yordamida tranzaksiyani qabul qiluvchi GetTransactionByHash funksiyasiga misol keltirilgan:

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 tranzaksiya xeshi orqali tranzaksiya balandligini olish uchun ishlatiladi. Yuqoridagi misoldan xeshni olaylik:

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

Shartnomani oling

Ishlab chiquvchilar shartnoma xeshi orqali shartnoma olish uchun GetContract funksiyasidan foydalanishlari mumkin. Shartnoma xeshni konvertatsiya qilish jarayoni yuqorida aytib o'tilgan tranzaksiya xeshini konvertatsiya qilish jarayoni bilan bir xil.

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 blokni olish uchun ishlatiladi. Muayyan blokni olishning ikki yo'li mavjud.

1. Blok balandligi bo'yicha blokni oling:

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

2. Blok xesh bo‘yicha blok oling:

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

2. Block API dan qanday foydalanish kerak

Block API-da uchta mavjud funksiya mavjud: GetTransactions, GetTransactionCountva GetTransactionByIndex. Biz ularni birma-bir ajratamiz.

GetTransactionCount

GetTransactionCount ma'lum bir blok uchun tranzaktsiyalar sonini olish uchun ishlatiladi.

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

Ishlab chiquvchilar ma'lum blokdagi barcha tranzaktsiyalarni olish uchun GetTransactions funksiyasidan foydalanishlari mumkin.

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 ma'lum bir blokda ma'lum bir tranzaktsiyani olish uchun ishlatiladi.

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

To'liq qo'llanmani bizning saytimizda topishingiz mumkin GitHub.

So'zdan keyin

Blockchain & Block API aqlli shartnomalarning ajralmas qismidir, chunki siz ulardan blockchain ma’lumotlarini so‘rash va aqlli shartnomalarda ma’lumotlarni bloklash uchun foydalanishingiz mumkin. Keyingi maqolalarda biz qolgan API-lardan qanday foydalanishni muhokama qilamiz va ularning Ontology blockchain bilan qanday aloqasi borligini bilib olamiz.

Maqola Hashrate&Shares muharrirlari tomonidan ayniqsa OntologyRussia uchun tarjima qilingan. yig'lamoq

Siz dasturchimisiz? Bizning texnologik hamjamiyatimizga qo'shiling Tanqid. Bundan tashqari, ko'rib chiqing Dasturchilar markazi veb-saytimizda ishlab chiquvchi vositalari, hujjatlar va boshqalarni topishingiz mumkin.

Ontologiya

Manba: www.habr.com

a Izoh qo'shish