Cara menulis kontrak pintar dengan Python di jaringan Ontology. Bagian 3: API Waktu Proses

Cara menulis kontrak pintar dengan Python di jaringan Ontology. Bagian 3: API Waktu Proses

Ini adalah bagian ke-3 dari serangkaian tutorial tentang pembuatan kontrak pintar dengan Python di jaringan blockchain Ontology. Di artikel sebelumnya, kita telah mempelajari tentang

  1. Blockchain & Blokir API
  2. API Penyimpanan.

Sekarang setelah Anda memiliki gambaran tentang cara memanggil API yang sesuai untuk penyimpanan persisten saat mengembangkan kontrak pintar dengan Python di jaringan Ontology, mari beralih ke mempelajari cara menggunakannya API Waktu Proses (API Eksekusi Kontrak). API Runtime memiliki delapan API terkait yang menyediakan antarmuka umum untuk eksekusi kontrak dan membantu pengembang mengambil, mengubah, dan memvalidasi data.

Berikut adalah deskripsi singkat dari 8 API tersebut:

Cara menulis kontrak pintar dengan Python di jaringan Ontology. Bagian 3: API Waktu Proses

Mari kita lihat lebih dekat cara menggunakan 8 API ini. Sebelum memulai, Anda dapat membuat kontrak baru di alat pengembangan kontrak pintar Ontology. SmartX dan ikuti petunjuk di bawah ini.

Cara menggunakan Runtime API

Ada dua cara untuk mengimpor API Runtime: ontologi.interop.Sistem.Runtime и ontologi.interop.Ontologi.RuntimeJalur ontologi berisi API yang baru ditambahkan. Baris berikut mengimpor data API.

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

API Pemberitahuan

Fungsi Notify menyiarkan suatu peristiwa ke seluruh jaringan. Pada contoh di bawah ini, fungsi Notify akan mengembalikan string heksadesimal "hello word" dan menyiarkannya ke seluruh jaringan.

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

Anda dapat melihatnya di log:

Cara menulis kontrak pintar dengan Python di jaringan Ontology. Bagian 3: API Waktu Proses

API GetTime

Fungsi GetTime mengembalikan stempel waktu saat ini, yaitu waktu Unix saat fungsi tersebut dipanggil. Satuan pengukurannya adalah detik.

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

API GetCurrentBlockHash

Fungsi GetCurrentBlockHash mengembalikan hash blok saat ini.

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

Serialisasi dan Deserialisasi

Ini adalah sepasang fungsi serialisasi dan deserialisasi. Fungsi Serialize mengonversi objek menjadi bytearray, dan fungsi Deserialize mengonversi bytearray kembali ke objek aslinya. Contoh kode di bawah ini mengonversi parameter yang masuk dan menyimpannya di penyimpanan persisten kontrak. Fungsi ini juga mengambil data dari penyimpanan persisten kontrak dan mengonversinya kembali ke objek aslinya.

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 dan AddressToBase58

Sepasang fungsi konversi alamat ini. Base58ToAddress mengonversi alamat yang dikodekan base58 menjadi alamat bytearray, dan AddressToBase58 mengonversi alamat bytearray menjadi alamat yang dikodekan 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 Periksa

Fungsi CheckWitness(fromAcct) memiliki dua fungsi:

  • Verifikasi apakah pemanggil fungsi saat ini adalah fromAcct. Jika ya (yaitu, pemeriksaan tanda tangan berhasil), fungsi akan kembali.
  • Periksa apakah objek yang memanggil fungsi saat ini merupakan sebuah kontrak. Jika merupakan kontrak dan fungsi tersebut dijalankan dari dalam kontrak, maka verifikasi akan diteruskan. Artinya, verifikasi apakah fromAcct adalah nilai balik dari GetCallingScriptHash(). Fungsi GetCallingScriptHash() dapat mengambil nilai hash kontrak dari kontrak pintar saat ini.

GetCallingScriptHash():

Baca selengkapnya di Guthub

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

Informasi lebih lanjut dapat ditemukan di GuthubPada artikel selanjutnya kami akan menyajikan API asliuntuk mempelajari cara mentransfer aset dalam kontrak pintar Ontology.

Artikel ini diterjemahkan oleh editor Hashrate & Shares khusus untuk OntologyRussia.

Apakah Anda seorang pengembang? Bergabunglah dengan komunitas teknologi kami di Discord. Juga, lihatlah Pusat Pengembang Ontologi, Anda dapat menemukan lebih banyak alat, dokumentasi, dan banyak lagi di sana.

Buka tugas untuk pengembang. Selesaikan tugas dan dapatkan hadiah.

Berlaku untuk program bakat Ontologi bagi siswa

Ontologi

Situs ontologi - GitHub - Discord - Telegram Rusia - Twitter - Reddit

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster