Bagaimana untuk menulis kontrak pintar dalam Python pada rangkaian Ontologi. Bahagian 3: API Runtime

Bagaimana untuk menulis kontrak pintar dalam Python pada rangkaian Ontologi. Bahagian 3: API Runtime

Ini adalah bahagian ke-3 dalam siri artikel pendidikan tentang mencipta kontrak pintar dalam Python pada rangkaian blok Ontology. Dalam artikel sebelum ini kita berkenalan dengannya

  1. Blockchain & Block API
  2. API Storan.

Memandangkan anda mempunyai idea tentang cara memanggil API storan berterusan yang sesuai apabila membangunkan kontrak pintar menggunakan Python pada rangkaian Ontologi, mari kita teruskan untuk mempelajari cara menggunakan API masa jalan (API Pelaksanaan Kontrak). Runtime API mempunyai 8 API berkaitan yang menyediakan antara muka biasa untuk pelaksanaan kontrak dan membantu pembangun mendapatkan semula, mengubah dan mengesahkan data.

Di bawah ialah penerangan ringkas tentang data 8 API:

Bagaimana untuk menulis kontrak pintar dalam Python pada rangkaian Ontologi. Bahagian 3: API Runtime

Mari kita lihat dengan lebih dekat cara menggunakan data 8 API. Sebelum ini, anda boleh membuat kontrak baharu dalam alat pembangunan kontrak pintar Ontologi SmartX dan ikut arahan di bawah.

Cara menggunakan API Runtime

Terdapat dua cara untuk mengimport API Masa Jalan: ontology.interop.System.Runtime ΠΈ ontologi.interop.Ontology.Rtime. Laluan Ontologi mengandungi API yang baru ditambah. Baris di bawah mengimport data API.

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

Maklumkan API

Fungsi Notify menyiarkan acara ke seluruh rangkaian. Dalam contoh di bawah, fungsi Notify akan mengembalikan rentetan hex "hello word" dan menyiarkannya ke seluruh rangkaian.

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

Anda boleh melihat ini dalam log:

Bagaimana untuk menulis kontrak pintar dalam Python pada rangkaian Ontologi. Bahagian 3: API Runtime

API GetTime

Fungsi GetTime mengembalikan cap masa semasa, yang mengembalikan masa Unix di mana fungsi itu dipanggil. Unit ukuran adalah kedua.

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

GetCurrentBlockHash API

Fungsi GetCurrentBlockHash mengembalikan cincangan blok semasa.

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

Serialize dan Deserialize

Ini ialah sepasang fungsi bersiri dan penyahserikatan. Fungsi Serialize menukar objek kepada objek bytearray, dan fungsi Deserialize menukar bytearray kepada objek asal. Sampel kod di bawah menukar parameter masuk dan menyimpannya dalam storan berterusan kontrak. Ia juga mendapatkan semula data daripada storan berterusan kontrak dan mengubahnya menjadi objek asal.

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

Pasangan fungsi terjemahan alamat ini. Fungsi Base58ToAddress menukar alamat berkod base58 kepada alamat bytearray, dan AddressToBase58 menukar alamat bytearray kepada alamat berkod 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)

Semak Saksi

Fungsi CheckWitness(fromAcct) mempunyai dua fungsi:

  • Sahkan sama ada pemanggil fungsi semasa adalah dariAcct. Jika ya (iaitu, pengesahan tandatangan diluluskan), fungsi itu kembali.
  • Semak sama ada objek yang memanggil fungsi semasa adalah kontrak. Jika ia adalah kontrak dan fungsi itu dilaksanakan daripada kontrak, maka pengesahan itu diluluskan. Iaitu, sahkan sama ada fromAcct ialah nilai pulangan GetCallingScriptHash(). Fungsi GetCallingScriptHash() boleh mengambil nilai cincang kontrak kontrak pintar semasa.

GetCallingScriptHash():

Baca lebih lanjut mengenai 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

Maklumat lanjut boleh didapati di Guthub. Dalam artikel seterusnya kami akan memperkenalkan API asliuntuk mempelajari cara memindahkan aset dalam kontrak pintar Ontologi.

Artikel itu diterjemahkan oleh editor Hashrate&Shares terutamanya untuk OntologyRussia.

Adakah anda seorang pemaju? Sertai komuniti teknologi kami di Perpecahan. Juga, lihat Pusat Pembangun Ontologi, anda boleh menemui lebih banyak alat, dokumentasi dan banyak lagi di sana.

Tugas terbuka untuk pembangun. Selesaikan tugas dan dapatkan ganjaran.

Memohon untuk program bakat Ontologi untuk pelajar

Ontologi

laman web ontologi - GitHub - Perpecahan - Telegram Rusia - Twitter - Reddit

Sumber: www.habr.com

Tambah komen