
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
- .
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:

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 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, GetCurrentBlockHashNotify 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:

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 numGetCurrentBlockHash 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_hashSerialize 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 datosBase58ToAddress 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
desde ontology.interop.System.Runtime import CheckWitness
desde ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
res=CheckWitness(addr)
return resMás información se puede encontrar en . 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 especialmente para OntologyRussia.
¿Eres desarrollador? Únete a nuestra comunidad técnica en . Además, echa un vistazo al Ontology, ahí se pueden encontrar más herramientas, documentación y mucho más.
Cierra la tarea — recibe una recompensa.
para el programa de talentos de Ontology para estudiantes
Ontology
— — — — —
Fuente: habr.com
