Cómo escribir un contrato inteligente en Python en la red Ontology. Parte 3: API de tiempo de ejecución

Cómo escribir un contrato inteligente en Python en la red Ontology. Parte 3: API de tiempo de ejecución

Esta es la tercera parte de una serie de artículos educativos sobre la creación de contratos inteligentes en Python en la red blockchain de Ontology. En los artículos anteriores nos familiarizamos con

  1. Blockchain & Block API
  2. Storage API.

Ahora que tienes una idea de cómo invocar la API adecuada para almacenamiento permanente al desarrollar un contrato inteligente con Python en la red Ontology, pasemos a ver cómo usar Runtime API (API de Ejecución de Contratos). La Runtime API tiene 8 API relacionadas que proporcionan interfaces comunes para ejecutar contratos y ayudan a los desarrolladores a obtener, transformar y verificar datos.

A continuación se presenta una breve descripción de estas 8 API:

Cómo escribir un contrato inteligente en Python en la red Ontology. Parte 3: API de tiempo de ejecución

Vamos a analizar más en detalle cómo utilizar estas 8 API. Antes de ello, puedes crear un nuevo contrato en la herramienta de desarrollo de contratos inteligentes de Ontology SmartX y seguir las instrucciones a continuación.

Cómo usar la Runtime API

Hay dos formas de importar Runtime API: ontology.interop.System.Runtime y ontology.interop.Ontology.Runtime. El camino Ontology contiene las API recién añadidas. Las siguientes líneas importan estas API.

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

Notify API

La función Notify transmite un evento a través de toda la red. En el siguiente ejemplo, la función Notify devolverá la cadena hex 'hello world' y la enviará por toda la red.

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

Puedes verlo en los registros:

Cómo escribir un contrato inteligente en Python en la red Ontology. Parte 3: API de tiempo de ejecución

GetTime API

La función GetTime devuelve la marca de tiempo actual, que retorna el tiempo Unix en el que se llamó a la función. La unidad es - segundos.

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

GetCurrentBlockHash API

La función GetCurrentBlockHash devuelve el hash del bloque actual.

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

Serialize y Deserialize

Estas son dos funciones de serialización y deserialización. La función Serialize convierte un objeto en un objeto bytearray, mientras que la función Deserialize convierte un bytearray en el objeto original. El siguiente ejemplo de código realiza la conversión de los parámetros de entrada y los guarda en el almacenamiento permanente del contrato. También extrae datos del almacenamiento permanente del contrato y los convierte en el objeto original.

desde ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
desde ontology.interop.System.Storage import Put, Get, GetContext

def Main(operación, args):
    si operación == 'serialize_to_bytearray':
        datos = args[0]
        return serialize_to_bytearray(datos)
    si operación == 'deserialize_from_bytearray':
        clave = args[0]
        return deserialize_from_bytearray(clave)
    return False


def serialize_to_bytearray(datos):
    sc = GetContext()
    clave = "1"
    byte_data = Serialize(datos)
    Put(sc, clave, byte_data)


def deserialize_from_bytearray(clave):
    sc = GetContext()
    byte_data = Get(sc, clave)
    datos = Deserialize(byte_data)
    return datos

Base58ToAddress y AddressToBase58

Este par de funciones convierte direcciones. La función Base58ToAddress convierte una dirección codificada en base58 a una dirección en forma de bytearray, mientras que AddressToBase58 convierte una dirección en forma de bytearray a una dirección codificada en base58.

desde 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

La función CheckWitness(fromAcct) tiene dos funcionalidades:

  • Verificar si el objeto que llama a la función actual es fromAcct. Si es así (es decir, la verificación de firma pasa), la función devuelve.
  • Verificar si el objeto que llama a la función actual es un contrato. Si es un contrato y la función se ejecuta desde un contrato, entonces la verificación se ha completado. Es decir, verificar si fromAcct es igual a GetCallingScriptHash(). La función GetCallingScriptHash() puede tomar el valor del hash del contrato del contrato inteligente actual.

GetCallingScriptHash():

Más detalles en Guthub

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

Más información se puede encontrar en Guthub. En el próximo artículo presentaremos API Nativo, para dominar cómo transferir activos en contratos inteligentes de Ontology.

El artículo fue traducido por el equipo editorial Hashrate&Shares especialmente para OntologyRussia.

¿Eres desarrollador? Únete a nuestra comunidad técnica en Discord. Además, echa un vistazo al Centro de Desarrolladores Ontology, ahí se pueden encontrar más herramientas, documentación y mucho más.

Tareas abiertas para desarrolladores. Cierra la tarea — recibe una recompensa.

Postularse para el programa de talentos de Ontology para estudiantes

Ontology

sitio web de Ontology — GitHub — Discord — Telegram Ruso — Twitter — Reddit

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster