ProHoster > Blog > administración > 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
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:
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:
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.
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.
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.
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.