Cum să scrii un smart contract în Python pe rețeaua Ontology. Partea 3: API-ul de execuție

Cum să scrii un smart contract în Python pe rețeaua Ontology. Partea 3: API-ul de execuție

Aceasta este a treia parte din seria de articole instructive despre crearea de contracte inteligente pe Python în rețeaua blockchain Ontology. În articolele precedente, ne-am familiarizat cu

  1. Blockchain & Block API
  2. Storage API.

Acum că aveți o idee despre cum să apelați API-ul corespunzător pentru stocarea permanentă în dezvoltarea contractelor inteligente utilizând Python în rețeaua Ontology, să trecem la utilizarea Runtime API (Contract Execution API). Runtime API are 8 API-uri asociate care oferă interfețe comune pentru executarea contractelor și ajută dezvoltatorii să obțină, să transforme și să verifice datele.

Iată o scurtă descriere a celor 8 API-uri:

Cum să scrii un smart contract în Python pe rețeaua Ontology. Partea 3: API-ul de execuție

Să examinăm mai în detaliu cum să utilizăm cele 8 API-uri. Înainte de aceasta, puteți crea un nou contract în instrumentul de dezvoltare a contractelor inteligente Ontology SmartX și să urmați instrucțiunile de mai jos.

Cum să utilizați Runtime API

Există două moduri de a importa Runtime API: ontology.interop.System.Runtime și ontology.interop.Ontology.Runtime. Calea Ontology include API-urile adăugate recent. Linile de mai jos importă aceste API-uri.

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

Notify API

Funcția Notify transmite un eveniment în întreaga rețea. În exemplul de mai jos, funcția Notify va returna un șir hexazecimal "hello world" și îl va transmite în întreaga rețea.

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

Puteți vedea acest lucru în jurnale:

Cum să scrii un smart contract în Python pe rețeaua Ontology. Partea 3: API-ul de execuție

GetTime API

Funcția GetTime returnează timestamp-ul curent, care returnează timpul Unix la care funcția a fost apelată. Unitatea de măsură este – secundă.

from ontology.interop.System.Runtime import GetTime
def demo():
    time=GetTime()
    return time # returnează un număr uint

GetCurrentBlockHash API

Funcția GetCurrentBlockHash returnează hash-ul blocului curent.

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

Serialize și Deserialize

Acestea sunt o pereche de funcții de serializare și deserializare. Funcția Serialize transformă un obiect într-un obiect bytearray, iar funcția Deserialize transformă bytearray în obiectul inițial. Exemplul de cod de mai jos efectuează transformarea parametrilor de intrare și îi salvează în stocarea permanentă a contractului. De asemenea, extrage datele din stocarea permanentă a contractului și le transformă în obiectul inițial.

din 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 și AddressToBase58

Această pereche de funcții convertește adresele. Funcția Base58ToAddress convertește o adresă codificată în base58 într-o adresă în formă de bytearray, iar AddressToBase58 convertește o adresă în formă de bytearray într-o adresă codificată în base58.

din 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)

CheckWitness

Funcția CheckWitness(fromAcct) are două funcționalități:

  • Verifică dacă obiectul care a apelat funcția curentă este fromAcct. Dacă da (adică, a trecut verificarea semnăturii), funcția returnează.
  • Verifică dacă obiectul care a apelat funcția curentă este un contract. Dacă este un contract și funcția este apelată dintr-un contract, atunci verificarea a fost aprobată. Adică, verifică dacă fromAcct este egal cu rezultatul lui GetCallingScriptHash(). Funcția GetCallingScriptHash() poate obține valoarea hash-ului contractului actual al smart contract-ului.

GetCallingScriptHash():

Mai multe informații pe Guthub

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

Mai multe informații se pot găsi pe Guthub. În articolul următor, vom prezenta Native API, pentru a învăța cum să transferi active în smart contractele Ontology.

Articolul a fost tradus de redacția Hashrate&Shares special pentru OntologyRussia.

Ești dezvoltator? Alătură-te comunității noastre tehnice pe Discord. De asemenea, aruncă o privire pe Centrul de Dezvoltatori Ontology, unde poți găsi mai multe instrumente, documentație și multe altele.

Sarcini deschise pentru dezvoltatori. Finalizează sarcina - primește o recompensă.

Aplică pentru programul de talente Ontology pentru studenți

Ontology

site-ul web Ontology — GitHub — Discord — Telegram Russian — Twitter — Reddit

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster