Cara menulis kontrak Python yang cerdas di jaringan Ontology. Bagian 1: Blockchain & Block API

gambar

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

Pada artikel ini, kami akan memulai pengantar kami tentang Ontology Smart Contract API. API kontrak pintar Ontology dibagi menjadi 7 modul:

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

Blockchain & Block API adalah bagian penting dari sistem kontrak pintar Ontology. Blockchain API mendukung operasi permintaan blok dasar, seperti mendapatkan ketinggian blok saat ini, sementara Block API mendukung operasi permintaan blok dasar, seperti meminta jumlah transaksi untuk blok tertentu.

Ayo mulai!

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

1. Cara menggunakan Blockchain API


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

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

Getheight


GetHeight digunakan untuk mendapatkan nomor urut blok terakhir di blockchain, seperti yang ditunjukkan pada contoh di bawah ini. Pada contoh terakhir, untuk kenyamanan, kami akan melewati fungsi Utama, tetapi 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 

Getheader


GetHeader, digunakan untuk mendapatkan judul 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 

GetTransactionByHash


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

 9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1 

Pertama-tama balik hash transaksi:

 c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279 

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

Kemudian, ubah hasilnya menjadi 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. Akhirnya, konversikan bytearray yang dihasilkan ke string yang serupa:

 \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 

Berikut ini adalah contoh dari fungsi GetTransactionByHash yang mengambil transaksi menggunakan 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 


GetTransactionHeight


GetTransactionHeight digunakan untuk mendapatkan ketinggian 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"\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 

Dapatkan kontrak


Pengembang dapat menggunakan fungsi GetContract untuk mendapatkan kontrak melalui hash kontrak. Proses konversi hash kontrak adalah proses konversi hash transaksi terkait 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 

Guncang


GetBlock digunakan untuk mendapatkan blok. 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 Blok API


Ada tiga fungsi yang tersedia di Blok API: GetTransactions , GetTransactionCount , dan GetTransactionByIndex . Kami akan mengurutkannya satu per satu.

Akun transaksi Gett


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 

Transaksi-transaksi


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

 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 digunakan untuk mendapatkan transaksi tertentu di blok ini.

 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 github kami.

Kata 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. Dalam artikel berikut, kami akan membahas cara menggunakan API lainnya dan mengetahui interaksinya dengan blockchain Ontology.


Artikel ini diterjemahkan oleh Hashrate & Shares khusus untuk OntologyRussia. klik
Apakah Anda seorang pengembang? Bergabunglah dengan komunitas teknologi kami di Discord . Selain itu, lihat Pusat Pengembang di situs web kami, tempat Anda dapat menemukan alat pengembang, dokumentasi, dan banyak lagi.

Ontologi


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


All Articles