
Esta es la primera parte de una serie de tutoriales sobre la creación de contratos inteligentes en Python en la red blockchain de Ontology utilizando la
herramienta de desarrollo de contratos inteligentes
SmartX .
En este artículo, comenzaremos nuestra introducción a Ontology Smart Contract API. La API de contrato inteligente de Ontology se divide en 7 módulos:
- Blockchain y Block API,
- API de almacenamiento
- API de tiempo de ejecución
- API nativa
- API de actualización
- API de motor de ejecución y
- API de llamadas estáticas y dinámicas.
Blockchain & Block API es una parte esencial del sistema de contrato inteligente de Ontology. La API Blockchain admite operaciones básicas de solicitud de blockchain, como obtener la altura actual del bloque, mientras que la API Block admite operaciones básicas de solicitud de bloque, como solicitar el número de transacciones para un bloque determinado.
¡Empecemos!Para comenzar, cree un nuevo contrato en
SmartX y luego siga las instrucciones a continuación.
1. Cómo usar la API Blockchain
Los enlaces a las funciones de contrato inteligente son idénticos a los enlaces de Python. Puede ingresar las funciones apropiadas según sea necesario. Por ejemplo, la siguiente declaración introduce GetHeight, una función para obtener la altura actual del bloque, y GetHeader, una función para obtener el encabezado del bloque.
from ontology.interop.System.Blockchain import GetHeight, GetHeader
Getheight
GetHeight se usa para obtener el último número de secuencia de bloque en la cadena de bloques, como se muestra en el siguiente ejemplo. En el último ejemplo, por conveniencia, omitiremos la función Principal, pero puede agregarla si es necesario.
from ontology.interop.System.Runtime import Notify from ontology.interop.System.Blockchain import GetHeight def Main(operation): if operation == 'demo': return demo() return False def demo(): height=GetHeight() Notify(height)
Getheader
GetHeader, utilizado para obtener el título del bloque, el parámetro es el número de serie del bloque en la cadena de bloques. Un ejemplo:
from ontology.interop.System.Runtime import Notify from ontology.interop.System.Blockchain import GetHeader def demo(): block_height=10 header=GetHeader(block_height) Notify(header) return header
GetTransactionByHash
GetTransactionByHash se utiliza para obtener una transacción a través de un hash de transacción. El hash de transacción se envía a
GetTransactionByHash como parámetros en el formato bytearray. La clave de esta función es convertir el hash de la transacción en formato hexadecimal en un hash de la transacción en formato bytearray. Este es un paso importante. De lo contrario, obtendría un error que indica que no hay bloque con dicho hash de bloque. Tomemos un hash hexadecimal de una transacción, como ejemplo, para convertirla al formato bytearray. Un ejemplo es el siguiente:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1
Primero invierta el hash de la transacción:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279
Los desarrolladores pueden dar este paso con la herramienta de conversión de números de número hexadecimal (little endian) proporcionada por SmartX.
Luego convierta el resultado al formato bytearray:
{0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f}
Esto se puede hacer utilizando la herramienta de conversión String Byte Array proporcionada por SmartX. Finalmente, convierta el bytearray resultante en una cadena similar:
\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f
El siguiente es un ejemplo de una función GetTransactionByHash que toma una transacción usando un hash de transacción:
from ontology.interop.System.Blockchain import GetTransactionByHash def demo():
GetTransactionHeight
GetTransactionHeight se usa para obtener la altura de una transacción a través de un hash de transacción. Tomemos el hash del ejemplo anterior:
from ontology.interop.System.Blockchain import GetTransactionHeight def demo():
Getcontract
Los desarrolladores pueden usar la función GetContract para obtener un contrato a través de un hash de contrato. El proceso de conversión de hash de contrato es el proceso de conversión de hash de transacción correspondiente mencionado anteriormente.
from ontology.interop.System.Blockchain import GetContract def demo():
Getblock
GetBlock se usa para obtener un bloque. Hay dos formas de obtener un bloque específico.
1. Obtenga el bloque por la altura del bloque: from ontology.interop.System.Blockchain import GetBlock def demo(): block=GetBlock(1408) return block
2. Obtenga el hash de bloque por bloque: from ontology.interop.System.Blockchain import GetBlock def demo(): block_hash=bytearray(b'\x16\xe0\xc5\x40\x82\x79\x77\x30\x44\xea\x66\xc8\xc4\x5d\x17\xf7\x17\x73\x92\x33\x6d\x54\xe3\x48\x46\x0b\xc3\x2f\xe2\x15\x03\xe4') block=GetBlock(block_hash)
2. Cómo usar Block API
Hay tres funciones disponibles en la API de bloque:
GetTransactions ,
GetTransactionCount y
GetTransactionByIndex . Los clasificaremos uno por uno.
Gettransactioncount
GetTransactionCount se usa para obtener el número de transacciones para un bloque determinado.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionCount def demo(): block=GetBlock(1408) count=GetTransactionCount(block) return count
Obtener transacciones
Los desarrolladores pueden usar la función GetTransactions para obtener todas las transacciones en este bloque.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactions def demo(): block=GetBlock(1408) txs=GetTransactions(block) return txs
GetTransactionByIndex
GetTransactionByIndex se utiliza para obtener una transacción específica en este bloque.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionByIndex def demo(): block=GetBlock(1408) tx=GetTransactionByIndex(block,0)
La guía completa se puede encontrar en nuestro
GitHub .
Epílogo
Blockchain & Block API es una parte indispensable de los contratos inteligentes, porque puede usarlos para solicitar datos de blockchain y bloquear datos en contratos inteligentes. En los siguientes artículos, discutiremos cómo usar el resto de las API y descubriremos su interacción con la cadena de bloques de Ontology.
El artículo fue traducido por Hashrate & Shares específicamente para OntologyRussia. haga clic
¿Eres desarrollador? Únete a nuestra comunidad tecnológica en
Discord . Además, eche un vistazo al
Centro de desarrolladores en nuestro sitio web, donde puede encontrar herramientas para desarrolladores, documentación y mucho más.
Ontología