Cara menulis kontrak pintar dengan Python di jaringan Ontology. Bagian 1: Blockchain & Blok API

Cara menulis kontrak pintar dengan Python di jaringan Ontology. Bagian 1: Blockchain & Blok API

Ini adalah bagian pertama dari serangkaian tutorial tentang cara membuat kontrak pintar Python di jaringan blockchain Ontology menggunakan alat pengembangan kontrak pintar. SmartX.

Pada artikel ini, kita akan mulai mengenal API kontrak pintar Ontology. API kontrak pintar Ontology dibagi menjadi 7 modul:

  1. Blockchain & Blokir API,
  2. API waktu proses,
  3. API penyimpanan,
  4. API asli,
  5. Tingkatkan API,
  6. API Mesin Eksekusi dan
  7. API Panggilan Statis & Dinamis.

Blockchain & Block API adalah bagian utama dari sistem kontrak pintar Ontology. Blockchain API mendukung operasi kueri blockchain dasar, seperti mendapatkan tinggi blok saat ini, sedangkan Block API mendukung operasi kueri blok dasar, seperti menanyakan jumlah transaksi untuk blok tertentu.

Mari kita mulai!

Pertama, buat kontrak baru di SmartXlalu ikuti petunjuk di bawah ini.

1. Cara menggunakan API Blockchain

Tautan ke fungsi kontrak pintar identik dengan tautan Python. Anda dapat memasukkan fungsi terkait sesuai kebutuhan. Misalnya, pernyataan berikut memperkenalkan fungsi GetHeight untuk mendapatkan tinggi blok saat ini, dan fungsi GetHeader untuk mendapatkan header blok.

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

Dapatkan Tinggi

GetHeight digunakan untuk mendapatkan nomor urut blok terakhir di blockchain, seperti yang ditunjukkan pada contoh di bawah ini. Pada contoh terakhir, kami akan menghilangkan fungsi Utama demi kenyamanan, namun Anda dapat menambahkannya jika perlu.

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

DapatkanHeader

GetHeader digunakan untuk mendapatkan header blok, parameternya adalah nomor seri blok di blockchain. Contoh:

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

DapatkanTransactionByHash

GetTransactionByHash digunakan untuk mendapatkan transaksi melalui hash transaksi. Hash transaksi dikirim ke DapatkanTransactionByHash sebagai parameter dalam format bytearray. Kunci dari fungsi ini adalah mengubah hash transaksi dalam format hex menjadi hash transaksi dalam format bytearray. Ini adalah langkah penting. Jika tidak, Anda akan mendapatkan kesalahan yang menunjukkan bahwa tidak ada blok dengan hash blok tersebut. Mari kita ambil hash transaksi dalam format hex sebagai contoh untuk mengubahnya menjadi format bytearray. Contohnya terlihat seperti ini:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Pertama, balikkan hash transaksi:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Pengembang dapat menyelesaikan langkah ini menggunakan alat konversi Nomor Hex (little endian) yang disediakan oleh SmartX.

Kemudian ubah hasilnya ke format 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}

Ini dapat dilakukan dengan menggunakan alat konversi String Byte Array yang disediakan oleh SmartX. Terakhir, ubah bytearray yang dihasilkan menjadi string serupa:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Berikut ini adalah contoh fungsi GetTransactionByHash yang mengambil transaksi menggunakan hash transaksi tersebut:

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

DapatkanTransactionHeight

GetTransactionHeight digunakan untuk mendapatkan tinggi transaksi melalui hash transaksi. Mari kita ambil hash dari contoh di atas:

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

Dapatkan Kontrak

Pengembang dapat menggunakan fungsi GetContract untuk mendapatkan kontrak melalui hash kontrak. Proses konversi hash kontrak sama dengan proses konversi hash transaksi yang disebutkan di atas.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

DapatkanBlok

GetBlock digunakan untuk mendapatkan blok. Ada dua cara untuk mendapatkan blok tertentu.

1. Dapatkan blok demi blok tinggi:

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

2. Dapatkan hash blok demi blok:

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

2. Cara menggunakan Blok API

Ada tiga fungsi yang tersedia di Block API: Dapatkan Transaksi, DapatkanTransactionCountDan DapatkanTransactionByIndex. Kami akan menguraikannya satu per satu.

DapatkanTransactionCount

GetTransactionCount digunakan untuk mendapatkan jumlah transaksi untuk blok tertentu.

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

Dapatkan Transaksi

Pengembang dapat menggunakan fungsi GetTransactions untuk mendapatkan semua transaksi di blok tertentu.

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

DapatkanTransactionByIndex

GetTransactionByIndex digunakan untuk mendapatkan transaksi tertentu di blok tertentu.

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

Panduan lengkap dapat ditemukan di kami GitHub.

penutup

Blockchain & Block API adalah bagian tak terpisahkan dari kontrak pintar karena Anda dapat menggunakannya untuk meminta data blockchain dan memblokir data dalam kontrak pintar. Pada artikel berikut, kita akan membahas cara menggunakan API lainnya dan mencari tahu bagaimana API tersebut berinteraksi dengan blockchain Ontology.

Artikel tersebut diterjemahkan oleh editor Hashrate&Shares khususnya untuk OntologyRussia. menangis

Apakah Anda seorang pengembang? Bergabunglah dengan komunitas teknologi kami di Discord. Juga, lihatlah Pusat Pengembang di situs web kami, tempat Anda dapat menemukan alat pengembang, dokumentasi, dan lainnya.

Ontologi

Sumber: www.habr.com

Tambah komentar