Ontology ağında Python'da akıllı sözleşme nasıl yazılır? Bölüm 1: Blok Zinciri ve Blok API'si

Ontology ağında Python'da akıllı sözleşme nasıl yazılır? Bölüm 1: Blok Zinciri ve Blok API'si

Bu, akıllı sözleşme geliştirme aracını kullanarak Ontology blockchain ağında Python'da akıllı sözleşmeler oluşturmaya ilişkin bir dizi eğitici makalenin ilk kısmıdır. SmartX.

Bu yazımızda Ontology akıllı sözleşme API'sini tanımaya başlayacağız. Ontology akıllı sözleşme API'si 7 modüle ayrılmıştır:

  1. Blockchain ve Blok API'si,
  2. Çalışma zamanı API'si
  3. Depolama API'si
  4. Yerel API
  5. API'yi yükseltin,
  6. Yürütme Motoru API'si ve
  7. Statik ve Dinamik Çağrı API'si.

Blockchain & Block API, Ontology akıllı sözleşme sisteminin temel parçasıdır. Blockchain API, bir bloğun mevcut yüksekliğini almak gibi temel blockchain sorgulama işlemlerini desteklerken Block API, belirli bir blok için işlem sayısını sorgulamak gibi temel blok sorgulama işlemlerini destekler.

Başlayalım!

Başlamak için şu adreste yeni bir sözleşme oluşturun: SmartXve ardından aşağıdaki talimatları izleyin.

1. Blockchain API'si nasıl kullanılır?

Akıllı sözleşme işlevi referansları Python referanslarıyla aynıdır. Gerektiğinde ilgili işlevleri girebilirsiniz. Örneğin, aşağıdaki ifade, bir bloğun geçerli yüksekliğini elde etmek için bir işlev olan GetHeight'ı ve bloğun başlığını almak için bir işlev olan GetHeader'ı tanıtır.

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

Yükseklik Al

GetHeight, aşağıdaki örnekte gösterildiği gibi blockchaindeki son blok sıra numarasını almak için kullanılır. Son örnekte kolaylık sağlamak için Ana işlevi atlayacağız, ancak gerekirse onu ekleyebilirsiniz.

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ı elde etmek için kullanılır; parametre, blok zincirindeki bloğun seri numarasıdır. Örnek:

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, bir işlem karmasını kullanarak bir işlemi almak için kullanılır. İşlem karması şuraya gönderilir: GetTransactionByHash bytearray formatında parametreler olarak. Bu fonksiyonun anahtarı, hex formatındaki işlem karmasını bytearray formatındaki işlem karmasına dönüştürmektir. Bu önemli bir adımdır. Aksi takdirde, söz konusu blok karma değerine sahip bir blok olmadığını belirten bir hata alırsınız. Bytearray formatına dönüştürmek için örnek olarak hex formatındaki işlem karmasını ele alalım. Örnek şuna benzer:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

İlk önce işlem karmasını tersine çevirin:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Geliştiriciler bu adımı SmartX tarafından sağlanan Hex Number(little endian)Number dönüştürme aracını kullanarak gerçekleştirebilirler.

Daha sonra ortaya çıkan sonucu bytearray formatına dönüştürün:

{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 tarafından sağlanan Dize Bayt Dizisi dönüştürme aracı kullanılarak yapılabilir. Son olarak, elde edilen bayt dizisini şunun gibi bir dizeye dönüştürün:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Aşağıda, bir işlemi işlem karma değerine göre alan GetTransactionByHash işlevinin bir örneği verilmiştir:

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, işlem karma değerini kullanarak işlem yüksekliğini elde etmek için kullanılır. Yukarıdaki örnekten hash'i alalım:

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

Sözleşme Alın

Geliştiriciler, bir sözleşme karması yoluyla bir sözleşmeyi almak için GetContract işlevini kullanabilir. Sözleşme hash dönüştürme işlemi, yukarıda bahsedilen işlem hash dönüştürme işlemiyle aynıdır.

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 almak için kullanılır. Belirli bir bloğu almanın iki yolu vardır.

1. Blok yüksekliğine göre bir blok alın:

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

2. Blok blok karma elde edin:

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

2. Block API nasıl kullanılır?

Block API'de mevcut üç işlev vardır: İşlemleri Al, GetTransactionCountve GetTransactionByIndex. Bunları tek tek çözeceğiz.

GetTransactionCount

GetTransactionCount, belirli bir blok için işlem sayısını almak için kullanılır.

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

İşlemleri Al

Geliştiriciler belirli bir bloktaki tüm işlemleri almak için GetTransactions işlevini kullanabilir.

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, belirli bir bloktaki belirli bir işlemi almak için kullanılır.

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

Rehberin tamamını sitemizde bulabilirsiniz. GitHub.

Послесловие

Blockchain & Block API, akıllı sözleşmelerin vazgeçilmez bir parçasıdır çünkü bunu blockchain verilerini sorgulamak ve akıllı sözleşmelerdeki verileri engellemek için kullanabilirsiniz. Gelecek makalelerde geri kalan API'lerin nasıl kullanılacağını tartışacağız ve Ontology blockchain ile nasıl etkileşime girdiklerini anlayacağız.

Makale Hashrate&Shares editörleri tarafından özellikle OntologyRussia için tercüme edilmiştir. tıklayın

Bir geliştirici misiniz? adresindeki teknoloji topluluğumuza katılın Discord. Şuna da bakın: Geliştirici Merkezi geliştirici araçlarını, belgeleri ve daha fazlasını bulabileceğiniz web sitemizde.

Ontoloji

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster