Bagaimana cara menulis kontrak pintar dengan Python pada Ontologi? Bagian 4: API Asli

gambar

Sebelumnya, saya telah memperkenalkan Kontrak Cerdas Ontology di
Bagian 1: Blockchain & Block API dan
Bagian 2: API Penyimpanan
Bagian 3: Runtime API
Hari ini, mari kita bicara tentang bagaimana menjalankan kontrak pintar asli Ontology melalui API Asli . Salah satu fungsi paling umum dari memohon kontrak asli adalah transfer aset.

Pendahuluan


API Asli hanya memiliki satu API. Saat Anda menggunakan fungsi Invoke, Anda perlu menggunakan fungsi status bawaan untuk membantu Anda merangkum parameter. Lihat di bawah untuk mempelajari cara menggunakan fungsi.

gambar

Sekarang mari kita masuk ke detail lebih lanjut tentang cara menggunakan 2 API ini. Sebelum itu, Anda dapat membuat kontrak baru di alat pengembangan kontrak pintar Ontology, SmartX, dan ikuti petunjuk di bawah ini. Seperti biasa, di akhir artikel, saya akan memberikan tautan ke kode sumber.

Cara Menggunakan API Asli


Seperti biasa, Anda perlu mengimpor 2 fungsi sebagai berikut sebelum menggunakannya.

from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state 

Daftar Kontrak Asli Ontologi


Saat ini ada 6 kontrak asli Ontology yang tersedia untuk pengembang. Di bawah ini adalah daftar 6 kontrak asli yang dapat diminta oleh API Asli.

gambar

Dalam kontrak, Anda hanya perlu mengubah alamat kontrak menjadi format bytearray dan memintanya.

Misalnya , ketika Anda perlu memanggil kontrak ONT Token, Anda dapat terlebih dahulu mengonversi alamat kontrak ONT Token ke dalam format bytearray, dan kemudian memanggil fungsi Invoke. Saat memanggil fungsi Invoke, parameter yang diimpor adalah nomor versi, alamat kontrak, metode kontrak yang digunakan, dan parameter terkait transfer yang dienkapsulasi oleh fungsi state.

Satu hal khusus yang perlu diperhatikan di sini adalah bahwa ketika melakukan transfer kontrak untuk ONG, jumlah yang terisi adalah 10⁹ kali jumlah aktual. Artinya, jika Anda perlu mentransfer 10 ONG, jumlah yang harus diisi adalah 10¹⁰. Saat menggunakan dompet, seperti ONTO atau Cyano untuk mentransfer, jumlah yang Anda masukkan adalah jumlah transfer.

 contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param]) 

Mentransfer kode kontrak


Di bawah ini kami memberikan contoh terperinci tentang cara menggunakan Python untuk mentransfer ONT dan ONG . Dalam kode di bawah ini, tipe parameter dari akun pengirim dan alamat penerima yang diimpor adalah string. Selain itu, dapat juga dikirimkan dengan jenis alamat parameter akun, sehingga menghemat biaya Gas untuk menjalankan kontrak. Prosesnya adalah sebagai berikut:

  1. Tentukan variabel alamat kontrak contract_address_ONT dan contract_address_ONG;
  2. Ubah alamat pengiriman dan penerimaan dari format base58 ke format bytearray;
  3. Verifikasi tanda tangan dan konfirmasikan bahwa alamat pengiriman sama dengan alamat pemanggilan kontrak;
  4. Fungsi status merangkum parameter terkait transfer;
  5. Fungsi Invoke memanggil kontrak asli ONT Token dan ONG Token untuk ditransfer;
  6. Tentukan apakah transfer berhasil dengan mengembalikan res. Jika nilai kembali adalah b '\ x01', maka transfer berhasil dan acara "transfer berhasil" akan didorong keluar.

 from ontology.interop.System.Runtime import Notify, CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state # contract address contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') contract_address_ONG = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') def Main(operation, args): if operation == 'transfer': from_acct = args[0] to_acct = args[1] ont_amount = args[2] ong_amount = args[3] return transfer(from_acct,to_acct,ont_amount,ong_amount) return False def transfer(from_acct, to_acct, ont_amount, ong_amount): # convert base58 address to address in the form of byte array from_acct=Base58ToAddress(from_acct) to_acct=Base58ToAddress(to_acct) # check whether the sender is the payer if CheckWitness(from_acct): # transfer ONT if ont_amount > 0: param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param]) if res and res == b'\x01': Notify('transfer succeeded') else: Notify('transfer failed') # transfer ONG if ong_amount > 0: param = state(from_acct, to_acct, ong_amount) res = Invoke(1, contract_address_ONG, 'transfer', [param]) if res and res == b'\x01': Notify('transfer succeeded') else: Notify('transfer failed') else: Notify('CheckWitness failed') 

Berlatih di SmartX


Anda juga dapat mengkompilasi dan menjalankan contoh kode di atas di SmarX dengan mengikuti langkah-langkah di bawah ini:

  • Kompilasi kontrak. Pertama, buat proyek di SmartX dan kompilasi kode dalam proyek ini.

gambar
  • Menyebarkan kontrak. Jika Anda memerlukan token uji untuk menggunakan kontrak, ajukan di sini . Hasil penyebaran adalah sebagai berikut:

gambar

  • Jalankan fungsi transfer. Sebelum menjalankan fungsi transfer, Anda perlu mengonfigurasi parameter seperti yang diperlukan. Dalam contoh di bawah ini, Anda perlu memasukkan alamat pengiriman, alamat penerima, dan jumlah ONT dan ONG yang ditransfer:

gambar

  • Transfer berhasil. Setelah Anda mengkonfigurasi parameter dengan benar, transfer akan berhasil ketika menjalankan fungsi transfer. Token yang ditransfer akan ditampilkan di alamat penerima di atas:

gambar

Ringkasan


Pada artikel ini, kami memperkenalkan Native API dari blockchain Ontology. Pengembang dapat menggunakan API ini untuk menjalankan kontrak asli Ontology. Pada artikel berikutnya, kami akan memperkenalkan API Peningkatan untuk mengeksplorasi cara meningkatkan kontrak dalam kontrak pintar Ontology.

Temukan tutorial tentang GitHub di sini .



Ini adalah tutorial resmi yang diterbitkan sebelumnya di blog Ontology Medium
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/id471358/


All Articles