
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
- Blockchain y Block API
- 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:

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:

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