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

imagen

Esta es la tercera parte de una serie de tutoriales sobre la creación de contratos inteligentes en Python en la red blockchain de Ontology. En artículos anteriores, nos encontramos

  1. Blockchain y Block API
  2. API de almacenamiento

Ahora que tiene una idea de cómo invocar la API de almacenamiento persistente adecuada al desarrollar un contrato inteligente utilizando Python en la red Ontology, conozcamos cómo usar la API Runtime (API de ejecución de contratos). Runtime API tiene 8 API relacionadas que proporcionan interfaces comunes para la ejecución del contrato y ayudan a los desarrolladores a recibir, transformar y verificar datos.

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

imagen

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

Cómo usar la API de tiempo de ejecución


Hay dos formas de importar la API de tiempo de ejecución: ontology.interop.System.Runtime y ontology.interop.Ontology.Runtime . La ruta de ontología contiene las API agregadas recientemente. Las siguientes líneas 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á a través de la red.

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

Puedes ver esto en los registros:

imagen

GetTime API


La función GetTime devuelve la marca de tiempo actual, que devuelve la hora de Unix en la que se llamó a la función. La unidad 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


Estas son un par de funciones de serialización y deserialización. La función Serialize convierte el objeto en un objeto bytearray, y la función Deserialize convierte el bytearray en el objeto original. El siguiente ejemplo de código convierte los parámetros entrantes y los almacena en el almacenamiento permanente del contrato. También extrae datos del almacenamiento permanente del contrato y los convierte en el 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 

Base58ToAddress y AddressToBase58


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


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

  • Verifique si el objeto de Acct está llamando a la función actual. En caso afirmativo (es decir, la verificación de la firma ha pasado), la función vuelve.
  • Compruebe si el objeto que llama a la función actual es un contrato. Si se trata de un contrato y la función se realiza desde el contrato, 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 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 la API nativa para aprender cómo transferir activos en los contratos inteligentes de Ontology.


El artículo fue traducido por Hashrate & Shares específicamente para OntologyRussia.

¿Eres desarrollador? Únete a nuestra comunidad tecnológica en Discord . Además, consulte el Centro de desarrolladores de Ontology para obtener más herramientas, documentación y más.


Tareas abiertas para desarrolladores. Cierre la tarea, obtenga una recompensa.

Solicite el Programa de Talento Estudiantil de Ontología

Ontología


Sitio web de Ontology - GitHub - Discord - Telegram Russian - Twitter - Reddit

Source: https://habr.com/ru/post/476862/


All Articles