Bagaimana cara menulis kontrak pintar dengan Python pada Ontologi? Bagian 1: Blockchain & Block API

gambar

Ini adalah tutorial resmi yang diterbitkan sebelumnya di blog Ontology Medium
Senang menerbitkannya untuk pembaca Habr. Jangan ragu untuk mengajukan pertanyaan terkait dan menyarankan format yang lebih baik untuk materi tutorial

Kata Pengantar


Dalam artikel ini, kami akan mulai memperkenalkan API kontrak pintar Ontologi. API kontrak pintar Ontology dibagi menjadi 7 modul:


Pada artikel ini, kami akan memperkenalkan Blockchain & Block API , yang merupakan bagian paling dasar 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.

Ayo mulai!

Pertama, buat kontrak baru di SmartX dan kemudian ikuti instruksi di bawah ini.

1. Cara Menggunakan Blockchain API


Referensi ke fungsi kontrak pintar identik dengan referensi Python. Pengembang dapat memperkenalkan fungsi yang sesuai sesuai kebutuhan. Misalnya, pernyataan berikut ini memperkenalkan GetHeight , fungsi untuk mendapatkan tinggi blok saat ini, dan GetHeader , fungsi untuk mendapatkan header blok.

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

1.1. Getheight


Anda dapat menggunakan GetHeight untuk mendapatkan ketinggian blok terbaru, seperti yang ditunjukkan pada contoh berikut. Pada contoh terakhir, untuk kenyamanan, kami akan menghilangkan fungsi Utama, tetapi Anda dapat menambahkannya jika diperlukan.

 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 

1.2 GetHeader


Anda bisa menggunakan GetHeader untuk mendapatkan header blok, dan parameternya adalah tinggi blok blok. Ini sebuah 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 

1.3 GetTransactionByHash


Anda dapat menggunakan fungsi GetTransactionByHash untuk mendapatkan transaksi melalui hash transaksi. Hash transaksi dikirim ke GetTransactionByHash sebagai parameter dalam format bytearray. Kunci dari fungsi ini adalah bagaimana mengkonversi hash transaksi dalam format hex ke hash transaksi dalam format bytearray. Ini merupakan langkah penting. Jika tidak, Anda akan mendapatkan kesalahan yang menunjukkan bahwa tidak ada blok hash blok ini.

Mari kita ambil hash transaksi dalam format hex sebagai contoh untuk mengubahnya menjadi format bytearray. Contohnya adalah sebagai berikut:

 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1 

Pertama, balikkan hash transaksi:

 c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279 

Pengembang dapat mengimplementasikan langkah ini dengan alat konversi Hex Number (little endian) <--> Number yang disediakan oleh SmartX.

Kemudian, konversikan 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} 

Pengembang dapat melakukan ini dengan alat konversi String <--> Byte Array yang disediakan oleh SmartX. Akhirnya, konversikan bytearray yang dihasilkan ke string yang sesuai:

 \xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f 

Di bawah ini adalah contoh dari fungsi GetTransactionByHash yang mendapatkan transaksi melalui hash transaksi:

 from ontology.interop.System.Blockchain import GetTransactionByHash def demo(): # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1" tx_hash=bytearray(b"\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f") tx=GetTransactionByHash(tx_hash) return tx 

1.4 GetTransactionHeight


Pengembang dapat menggunakan fungsi GetTransactionHeight untuk mendapatkan tinggi transaksi melalui hash transaksi. Mari kita ambil hash dalam contoh di atas:

 from ontology.interop.System.Blockchain import GetTransactionHeight def demo(): # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1" tx_hash=bytearray(b"\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f") height=GetTransactionHeight(tx_hash) return height 

1.5 GetContract


Anda dapat menggunakan fungsi GetContract untuk mendapatkan kontrak melalui hash kontrak. Proses konversi hash kontrak konsisten 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"\xfa\x98\x96\x21\x32\x32\xbb\xf0\x9f\x23\x91\xfa\xef\x95\x9b\xff\xa5\x75\x1a\xd8") contract=GetContract(contract_hash) return contract 

1.6 GetBlock


Anda dapat menggunakan fungsi GetBlock untuk mendapatkan blokir. Ada dua cara untuk mendapatkan blok tertentu:
1. Dapatkan ketinggian blok demi blok:

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

2. Dapatkan blok demi blok:

 from ontology.interop.System.Blockchain import GetBlock def demo(): block_hash=bytearray(b'\x16\xe0\xc5\x40\x82\x79\x77\x30\x44\xea\x66\xc8\xc4\x5d\x17\xf7\x17\x73\x92\x33\x6d\x54\xe3\x48\x46\x0b\xc3\x2f\xe2\x15\x03\xe4') block=GetBlock(block_hash) 

2 Cara Menggunakan API Blok


Ada tiga fungsi yang tersedia di Blok API, yaitu GetTransactions, GetTransactionCount, dan GetTransactionByIndex . Kami akan memperkenalkan mereka satu per satu.

2.1 GetTransactionCount


Anda dapat menggunakan fungsi GetTransactionCount 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 

2.2 GetTransactions


Anda dapat menggunakan fungsi GetTransactions untuk mendapatkan semua transaksi di blok yang diberikan.

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

2.3 GetTransactionByIndex


Anda dapat menggunakan fungsi GetTransactionByIndex untuk mendapatkan transaksi tertentu di blok yang diberikan.

 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 

Temukan tutorial lengkap tentang GitHub kami di sini .

Kata penutup


Blockchain & Block API adalah bagian paling penting dari kontrak pintar karena Anda dapat menggunakannya untuk menanyakan data blockchain dan memblokir data dalam kontrak pintar. Dalam beberapa artikel berikutnya, kita akan membahas cara menggunakan API lain untuk mengeksplorasi interaksinya dengan blockchain Ontology.



Apakah Anda seorang pengembang? Pastikan Anda telah bergabung dengan komunitas teknologi kami di Discord . Juga, lihat Pusat Pengembang di situs web kami, di sana Anda dapat menemukan alat pengembang, dokumentasi, dan banyak lagi.

Temukan ontologi di tempat lain


Situs web ontologi
Github / perselisihan
Telegram ( Bahasa Inggris / Rusia )
Twitter / Reddit /

Source: https://habr.com/ru/post/id468821/


All Articles