ProHoster > Blog > Ma'muriyat > 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:
Blockchain & Block API,
ish vaqti API,
saqlash API,
mahalliy API,
APIni yangilash,
Execution Engine API va
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:
Ishlab chiquvchilar ushbu bosqichni SmartX tomonidan taqdim etilgan Hex Number(kichik endian)Raqamni o'zgartirish vositasi yordamida bajarishlari mumkin.
Buni SmartX tomonidan taqdim etilgan String Bayte Array konvertatsiya qilish vositasi yordamida amalga oshirish mumkin. Nihoyat, natijada olingan bayt-arrayni o'xshash qatorga aylantiring:
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.
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.