Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 3: API d'execució

Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 3: API d'execució

Aquesta és la tercera part d'una sèrie d'articles educatius sobre la creació de contractes intel·ligents en Python a la xarxa de blockchain d'Ontology. En articles anteriors ens vam familiaritzar

  1. Blockchain i Block API
  2. API d'emmagatzematge.

Ara que teniu una idea de com trucar a l'API d'emmagatzematge persistent adequada quan desenvolupeu un contracte intel·ligent mitjançant Python a la xarxa d'Ontology, passem a aprendre a utilitzar-lo. API d'execució (API d'execució de contractes). L'API Runtime té 8 API relacionades que proporcionen interfícies comunes per a l'execució de contractes i ajuden els desenvolupadors a recuperar, transformar i validar dades.

A continuació es mostra una breu descripció de les 8 dades de l'API:

Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 3: API d'execució

Fem una ullada més de prop a com utilitzar les dades de l'API 8. Abans d'això, podeu crear un nou contracte a l'eina de desenvolupament de contracte intel·ligent d'Ontology SmartX i seguiu les instruccions següents.

Com utilitzar l'API Runtime

Hi ha dues maneres d'importar API d'execució: ontology.interop.System.Runtime и ontology.interop.Ontology.Runtime. La ruta d'ontologia conté les API recentment afegides. Les línies següents importen les dades de l'API.

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

Notificar a l'API

La funció Notificar emet l'esdeveniment a tota la xarxa. A l'exemple següent, la funció Notificar retornarà la cadena hexadecimal "hola paraula" i l'emetrà a tota la xarxa.

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

Això ho podeu veure als registres:

Com escriure un contracte intel·ligent en Python a la xarxa d'Ontology. Part 3: API d'execució

API GetTime

La funció GetTime retorna la marca de temps actual, que retorna l'hora Unix en què es va cridar la funció. La unitat de mesura és la segona.

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

API GetCurrentBlockHash

La funció GetCurrentBlockHash retorna el hash del bloc actual.

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

Serialitzar i deserialitzar

Aquest és un parell de funcions de serialització i deserialització. La funció Serialize converteix un objecte en un objecte bytearray, i la funció Deserialize converteix un bytearray a l'objecte original. La mostra de codi següent converteix els paràmetres entrants i els emmagatzema a l'emmagatzematge persistent del contracte. També recupera dades de l'emmagatzematge persistent del contracte i les transforma en l'objecte original.

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

Aquest parell de funcions de traducció d'adreces. La funció Base58ToAddress converteix una adreça codificada en base58 en una adreça bytearray, i AddressToBase58 converteix una adreça bytearray en una adreça codificada en 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)

Comprova el testimoni

La funció CheckWitness(fromAcct) té dues funcionalitats:

  • Verifiqueu si la persona que truca la funció actual és fromAcct. Si sí (és a dir, la verificació de la signatura s'ha passat), la funció torna.
  • Comproveu si l'objecte que crida la funció actual és un contracte. Si es tracta d'un contracte i la funció s'executa des del contracte, s'aprova la verificació. És a dir, verifiqueu si fromAcct és el valor de retorn de GetCallingScriptHash(). La funció GetCallingScriptHash() pot prendre el valor hash del contracte del contracte intel·ligent actual.

GetCallingScriptHash():

Més sobre 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

Podeu trobar més informació a Guthub. En el proper article us presentarem API nativaper aprendre a transferir actius als contractes intel·ligents d'Ontology.

L'article ha estat traduït pels editors Hashrate i comparticions especialment per a Ontologia Rússia.

Ets desenvolupador? Uneix-te a la nostra comunitat tecnològica a Discòrdia. A més, fes-hi una ullada Centre de desenvolupadors Ontologia per a més eines, documentació i molt més.

Tasques obertes per a desenvolupadors. Tanqueu la tasca: obteniu una recompensa.

Aplicar per al programa de talent Ontologia per a estudiants

Ontologia

Web d'ontologia - GitHub - Discòrdia - Telegrama rus - Twitter - Reddit

Font: www.habr.com

Afegeix comentari