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

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

Esta es la parte 3 de una serie de tutoriales sobre la creación de contratos inteligentes en Python en la red blockchain de Ontology. En artículos anteriores hemos visto

  1. Cadena de bloques y API de bloques
  2. API de almacenamiento.

Ahora que tiene una idea de cómo llamar a la API de almacenamiento persistente adecuada al desarrollar un contrato inteligente con Python en la red Ontology, pasemos a aprender a usar API de tiempo de ejecución (API de ejecución de contratos). Runtime API tiene 8 API relacionadas que proporcionan interfaces comunes para la ejecución de contratos y ayudan a los desarrolladores a obtener, transformar y validar datos.

A continuación se muestra una breve descripción de la API de datos 8:

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

Echemos un vistazo más de cerca a cómo utilizar estas 8 API. Antes de eso, puede crear un nuevo contrato en la herramienta de desarrollo de contratos inteligentes de Ontology. SmartX y siga las instrucciones a continuación.

Cómo utilizar la API en tiempo de ejecución

Hay dos formas de importar API de tiempo de ejecución: ontología.interop.System.Runtime и ontología.interop.Ontología.Runtime. La ruta de la ontología contiene API recién agregadas. Las líneas siguientes importan los datos de la API.

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

Notificar API

La función Notificar transmite el evento a través de la red. En el siguiente ejemplo, la función Notificar devolverá la cadena hexadecimal "hola palabra" y la transmitirá por toda la red.

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

Puedes ver esto en los registros:

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

API GetTime

La función GetTime devuelve la marca de tiempo actual, que devuelve la hora Unix en la que se llamó a la función. La unidad de medida es la segunda.

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

API GetCurrentBlockHash

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

Serializar y deserializar

Este es un par de funciones de serialización y deserialización. La función Serialize convierte un objeto en un objeto bytearray y la función Deserialize convierte un bytearray en su objeto original. El siguiente código de muestra convierte los parámetros entrantes y los almacena en el almacenamiento persistente del contrato. También recupera los datos del almacenamiento persistente del contrato y los convierte al objeto 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

Base58ADirección y DirecciónABase58

Este par de funciones de traducción de direcciones. La función Base58ToAddress convierte una dirección codificada en base58 en una dirección de matriz de bytes, y AddressToBase58 convierte una dirección de matriz de bytes en una dirección 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)

Testigo de control

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

  • Verifique si el objeto que llama a la función actual es deAcct. En caso afirmativo (es decir, se aprobó la verificación de firma), la función regresa.
  • Compruebe si el objeto que llama a la función actual es un contrato. Si es un contrato y la función se ejecuta desde el contrato, entonces se pasa la verificación. Es decir, verifique si fromAcct es el valor de retorno de GetCallingScriptHash(). La función GetCallingScriptHash() puede tomar el valor hash del contrato inteligente 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

Se puede encontrar más información en Guthub. En el próximo artículo presentaremos API nativapara aprender cómo transferir activos en contratos inteligentes de Ontology.

El artículo fue traducido por los editores. Hashrate y acciones especialmente para OntologyRussia.

¿Eres desarrollador? Únase a nuestra comunidad tecnológica en Discord. Además, eche un vistazo a Centro de desarrolladores Ontología para obtener más herramientas, documentación y más.

Tareas abiertas para desarrolladores. Cierra la tarea y obtén una recompensa.

Aplicar para el programa de talentos Ontology para estudiantes

Ontología

sitio web de ontología - GitHub - Discord - telegrama ruso - Twitter - Reddit

Fuente: habr.com

Añadir un comentario