Bagaimana cara menulis kontrak pintar dengan Python pada Ontologi? Bagian 3: Runtime API

gambar

Pendahuluan


Sebelumnya, saya telah memperkenalkan Kontrak Cerdas Ontology di
Bagian 1: Blockchain & Block API dan
Bagian 2: API Penyimpanan
Sekarang ketika Anda memiliki ide tentang bagaimana memanggil API yang relevan untuk penyimpanan persisten ketika mengembangkan kontrak pintar Python pada Ontologi, mari kita pergi ke Runtime API (API Eksekusi Kontrak). Runtime API memiliki 8 API terkait yang menyediakan antarmuka umum untuk pelaksanaan kontrak dan membantu pengembang mendapatkan, mengonversi, dan memvalidasi data. Berikut ini deskripsi singkat dari 8 API ini:

gambar

Mari kita lihat lebih dekat bagaimana menggunakan 8 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 Runtime API


Ada 2 jalur untuk mengimpor Runtime API, ontology.interop.System.Runtime dan ontology.interop.Ontology.Runtime . Jalur Ontologi berisi API yang baru ditambahkan. Baris berikut mengimpor API ini.

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash 

Beritahu API


Fungsi Notify menyiarkan acara ke seluruh jaringan. Dalam contoh berikut, fungsi Beritahu akan mengembalikan string hex "hello world" dan menyiarkannya ke seluruh jaringan.

 from ontology.interop.System.Runtime import Notify def demo(): Notify("hello world") 

Anda dapat melihatnya di Log :

gambar

API GetTime


Fungsi GetTime mengembalikan timestamp saat ini, yang mengembalikan waktu Unix di mana fungsi dipanggil. Unit kedua.

 from ontology.interop.System.Runtime import GetTime def demo(): time=GetTime() return time # return a uint num 

API GetCurrentBlockHash


Fungsi GetCurrentBlockHash mengembalikan hash dari blok saat ini.

 from ontology.interop.Ontology.Runtime import GetCurrentBlockHash def demo(): block_hash = GetCurrentBlockHash() return block_hash 

Serialize & Deserialize


Ini adalah sepasang fungsi serialisasi dan deserialisasi. Fungsi Serialize membuat serialisasi objek ke objek byte array, dan fungsi Deserialize membatalkan array byte ke objek asli. Sampel kode berikut mengimplementasikan serialisasi parameter yang masuk dan menyimpannya dalam penyimpanan kontrak yang persisten. Itu juga mengekstrak data dari penyimpanan persisten kontrak dan deserializes itu.

 from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.System.Storage import Put, Get, GetContext def Main(operation, args): if operation == 'serialize_to_bytearray': data = args[0] return serialize_to_bytearray(data) if operation == 'deserialize_from_bytearray': key = args[0] return deserialize_from_bytearray(key) return False def serialize_to_bytearray(data): sc = GetContext() key = "1" byte_data = Serialize(data) Put(sc, key, byte_data) def deserialize_from_bytearray(key): sc = GetContext() byte_data = Get(sc, key) data = Deserialize(byte_data) return data 

Base58ToAddress & AlamatToBase58


Ini adalah sepasang fungsi konversi alamat. Fungsi Base58ToAddress mengubah alamat yang disandikan base58 menjadi alamat bentuk array byte, dan AddressToBase58 mengubah alamat bentuk array byte menjadi alamat yang disandikan base58.

 from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58 def demo(): base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn" addr=Base58ToAddress(base58_addr) Log(addr) base58_addr=AddressToBase58(addr) Log(base58_addr) 

Saksi pemeriksaan


Fungsi CheckWitness (fromAcct) memiliki dua fungsi:

  • Verifikasi apakah pemanggil fungsi saat ini berasal dari Acc. Jika ya (yaitu verifikasi tanda tangan berlalu), fungsi kembali.
  • Periksa apakah pemanggil fungsi saat ini adalah kontrak. Jika ini adalah kontrak, dan fungsinya dijalankan dari kontrak, maka verifikasi dilewatkan. Yaitu, verifikasi jika fromAcct adalah nilai balik dari GetCallingScriptHash (). Fungsi GetCallingScriptHash () bisa mendapatkan nilai hash kontrak dari kontrak pintar saat ini.

GetCallingScriptHash () :


Penyusun ontologi Python

 from ontology.interop.System.Runtime import CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress def demo(): addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z") res=CheckWitness(addr) return res 

Temukan tutorial lengkapnya di sini .

Ringkasan


Pada artikel ini, saya memperkenalkan Runtime API dari blockchain Ontology, yang sangat penting dalam kontrak pintar Ontology Python. Pada artikel selanjutnya, kita akan melihat Native API untuk mengeksplorasi cara mentransfer aset dalam kontrak pintar Ontology.



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/id470722/


All Articles