¿Cómo escribir un contrato inteligente con Python en ontología? Parte 3: API de tiempo de ejecución

imagen

Introduccion


Anteriormente, introduje el contrato inteligente de ontología en
Parte 1: Blockchain y Block API y
Parte 2: API de almacenamiento
Ahora, cuando tenga una idea sobre cómo llamar a la API relevante para el almacenamiento persistente al desarrollar el contrato inteligente de Python en Ontology, pasemos a Runtime API (Contract Execution API). Runtime API tiene 8 API relacionadas que proporcionan interfaces comunes para la ejecución de contratos y ayudan a los desarrolladores a obtener, convertir y validar datos. Aquí hay una breve descripción de estas 8 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. Como de costumbre, al final del artículo, proporcionaré un enlace al código fuente.

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


Hay 2 rutas para importar la API de tiempo de ejecución, ontology.interop.System.Runtime y ontology.interop.Ontology.Runtime . La ruta de Ontology contiene API recién agregadas. 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 

Notificar API


La función Notificar transmite eventos a toda la red. En el siguiente ejemplo, la función Notificar devolverá una cadena hexadecimal "hola mundo" y la transmitirá a toda la red.

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

Puede verlo 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


Este es un par de funciones de serialización y deserialización. La función Serializar serializa un objeto en un objeto de matriz de bytes, y la función Deserializar deserializa la matriz de bytes en el objeto original. El siguiente ejemplo de código implementa la serialización de los parámetros entrantes y los almacena en el almacenamiento persistente del contrato. También extrae datos del almacenamiento persistente del contrato y lo deserializa.

 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 & AddressToBase58


Este es un par de funciones de conversión de direcciones. La función Base58ToAddress convierte la dirección codificada en base58 en una dirección de formulario de matriz de bytes, y AddressToBase58 convierte la dirección del formulario 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


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

  • Verifique si la persona que llama la función actual es de Acct. En caso afirmativo (es decir, verificación de firma aprobada), la función vuelve.
  • Compruebe si la función actual de la persona que llama es un contrato. Si es un contrato y la función se ejecuta 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 obtener el valor hash del contrato del contrato inteligente actual.

GetCallingScriptHash () :


Ontology Python compiler

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

Encuentra el tutorial completo aquí .

Resumen


En este artículo, presenté la API de tiempo de ejecución de la cadena de bloques de Ontology, que es muy importante en el contrato inteligente de Ontology Python. En el próximo artículo, veremos la API nativa para explorar cómo transferir activos en los contratos inteligentes de Ontology.



Este es un tutorial oficial publicado anteriormente en el blog Ontology Medium

¿Eres desarrollador? Asegúrate de unirte a nuestra comunidad tecnológica en Discord . Además, eche un vistazo al Centro de desarrolladores en nuestro sitio web, donde puede encontrar herramientas de desarrollador, documentación y más.

Encuentra ontología en otro lugar


Sitio web de ontología
Github / discordia
Telegram Inglés / Ruso
Twitter / Reddit

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


All Articles