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 artikel pendidikan tentang cara membuat kontrak pintar dengan Python di jaringan blockchain Ontology. Di artikel sebelumnya kita berkenalan

  1. Blockchain & Blokir API
  2. API Penyimpanan.

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

Berikut penjelasan singkat mengenai 8 data API tersebut:

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

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

Cara menggunakan API Runtime

Ada dua cara untuk mengimpor API Runtime: ontologi.interop.Sistem.Runtime и ontologi.interop.Ontologi.Waktu berjalan. Jalur Ontologi berisi API yang baru ditambahkan. Baris di bawah ini mengimpor data API.

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

Beritahu API

Fungsi Beritahu menyiarkan acara ke seluruh jaringan. Pada contoh di bawah, fungsi Notify akan mengembalikan string hex “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, yang mengembalikan 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

DapatkanCurrentBlockHashAPI

Fungsi GetCurrentBlockHash mengembalikan hash dari 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 mengubah objek menjadi objek bytearray, dan fungsi Deserialize mengubah bytearray menjadi objek asli. Contoh kode di bawah ini mengonversi parameter masuk dan menyimpannya di penyimpanan persisten kontrak. Itu juga mengambil data dari penyimpanan persisten kontrak dan mengubahnya menjadi objek asli.

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 terjemahan alamat ini. Fungsi 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)

Periksa Saksi

Fungsi CheckWitness(fromAcct) memiliki dua fungsi:

  • Verifikasi apakah pemanggil fungsi saat ini berasal dari Acct. Jika ya (yaitu, verifikasi tanda tangan berhasil), fungsi akan kembali.
  • Periksa apakah objek yang memanggil fungsi saat ini adalah kontrak. Jika itu adalah kontrak dan fungsinya dijalankan dari kontrak, maka verifikasi lolos. Artinya, verifikasi apakah fromAcct adalah nilai kembalian GetCallingScriptHash(). Fungsi GetCallingScriptHash() dapat mengambil nilai hash kontrak dari kontrak pintar saat ini.

GetCallingScriptHash():

Lebih lanjut tentang 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 Guthub. Pada artikel berikutnya kami akan memperkenalkan API asliuntuk mempelajari cara mentransfer aset dalam kontrak pintar Ontology.

Artikel itu diterjemahkan oleh editor Hashrate & Bagikan 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

Tambah komentar