Ontology şəbəkəsində Python-da ağıllı müqaviləni necə yazmaq olar. 1-ci hissə: Blockchain & Block API

Ontology şəbəkəsində Python-da ağıllı müqaviləni necə yazmaq olar. 1-ci hissə: Blockchain & Block API

Bu, ağıllı müqavilə inkişaf alətindən istifadə edərək Ontology blockchain şəbəkəsində Python smart müqavilələrinin yaradılması üzrə bir sıra dərsliklərin birinci hissəsidir. SmartX.

Bu yazıda Ontology smart contract API ilə tanışlığımıza başlayacağıq. Ontology smart contract API 7 modula bölünür:

  1. Blockchain & Block API,
  2. iş vaxtı API,
  3. yaddaş API,
  4. doğma API,
  5. API təkmilləşdirin,
  6. Execution Engine API və
  7. Statik və Dinamik Zəng API.

Blockchain & Block API Ontology smart müqavilə sisteminin əsas hissəsidir. Blockchain API cari blok hündürlüyünü əldə etmək kimi əsas blokçeyn sorğu əməliyyatlarını dəstəkləyir, Block API isə verilmiş blok üçün əməliyyatların sayını sorğulamaq kimi əsas blok sorğu əməliyyatlarını dəstəkləyir.

Gəlin başlayaq!

Əvvəlcə yeni bir müqavilə yaradın SmartXvə sonra aşağıdakı təlimatlara əməl edin.

1. Blockchain API-dən necə istifadə etmək olar

Ağıllı müqavilə funksiyalarına keçidlər Python bağlantıları ilə eynidir. Lazım olduqda müvafiq funksiyaları daxil edə bilərsiniz. Məsələn, aşağıdakı ifadə cari blok hündürlüyünü əldə etmək üçün GetHeight funksiyasını və blokun başlığını əldə etmək üçün GetHeader funksiyasını təqdim edir.

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

GetHeight

GetHeight aşağıdakı nümunədə göstərildiyi kimi blokçeynində sonuncu blok sıra nömrəsini əldə etmək üçün istifadə olunur. Sonuncu misalda biz rahatlıq üçün Main funksiyasını buraxacağıq, lakin lazım gələrsə, onu əlavə edə bilərsiniz.

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 başlığını əldə etmək üçün istifadə olunur, parametr blokçeyndəki blokun seriya nömrəsidir. Misal:

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 əməliyyat hash vasitəsilə əməliyyat almaq üçün istifadə olunur. Əməliyyat hash göndərilir GetTransactionByHash bytearray formatında parametrlər kimi. Bu funksiyanın açarı hex formatında əməliyyat hashını bytearray formatında tranzaksiya hashına çevirməkdir. Bu mühüm addımdır. Əks halda, həmin blok hash ilə heç bir blok olmadığını göstərən xəta alacaqsınız. Onu bytearray formatına çevirmək üçün nümunə olaraq hex formatında əməliyyat hashını götürək. Bir nümunə belə görünür:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Birincisi, tranzaksiya hashını tərsinə çevirin:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Tərtibatçılar SmartX tərəfindən təqdim olunan Hex Number(kiçik endian)Nömrə çevirmə alətindən istifadə edərək bu addımı yerinə yetirə bilərlər.

Sonra nəticəni bytearray formatına çevirin:

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

Bu, SmartX tərəfindən təmin edilən String Byte Array çevirmə alətindən istifadə etməklə edilə bilər. Nəhayət, ortaya çıxan bayt serialını oxşar sətirə çevirin:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Aşağıda əməliyyatın hashindən istifadə edərək əməliyyat aparan GetTransactionByHash funksiyasının nümunəsi verilmişdir:

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 hesh vasitəsilə əməliyyat hündürlüyünü əldə etmək üçün istifadə olunur. Yuxarıdakı misaldan hash götürək:

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

Müqavilə alın

Tərtibatçılar müqavilənin hash vasitəsilə müqavilə əldə etmək üçün GetContract funksiyasından istifadə edə bilərlər. Müqavilənin hash çevrilməsi prosesi yuxarıda qeyd olunan əməliyyat hash çevrilməsi prosesi ilə eynidir.

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 blok əldə etmək üçün istifadə olunur. Müəyyən bir blok əldə etməyin iki yolu var.

1. Blok hündürlüyünə görə blok alın:

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

2. Blok hash ilə blok alın:

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

2. Block API-dən necə istifadə etmək olar

Block API-də üç mövcud funksiya var: GetTransactions, GetTransactionCountGetTransactionByIndex. Onları bir-bir parçalayacağıq.

GetTransactionCount

GetTransactionCount müəyyən blok üçün əməliyyatların sayını almaq üçün istifadə olunur.

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

Tərtibatçılar müəyyən blokda bütün əməliyyatları əldə etmək üçün GetTransactions funksiyasından istifadə edə bilərlər.

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 müəyyən bir blokda xüsusi əməliyyat almaq üçün istifadə olunur.

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

Tam bələdçini saytımızda tapa bilərsiniz Github.

Sözündən sonra

Blockchain & Block API ağıllı müqavilələrin əvəzsiz hissəsidir, çünki siz onlardan blockchain məlumatlarını tələb etmək və ağıllı müqavilələrdə məlumatları bloklamaq üçün istifadə edə bilərsiniz. Növbəti məqalələrdə biz qalan API-lərdən necə istifadə edəcəyimizi müzakirə edəcəyik və onların Ontology blockchain ilə necə qarşılıqlı əlaqədə olduğunu öyrənəcəyik.

Məqalə Hashrate&Shares redaktorları tərəfindən xüsusilə OntologyRussia üçün tərcümə edilmişdir. ağlamaq

Siz tərtibatçısınız? texnoloji icmamıza qoşulun Diskordur. Həmçinin, bir nəzər salın İnkişaf etdirici Mərkəzi tərtibatçı alətləri, sənədləri və s. tapa biləcəyiniz vebsaytımızda.

Ontologiya

Mənbə: www.habr.com

Добавить комментарий