ProHoster > Blog > administración > Cómo escribir un contrato inteligente en Python en la red Ontology. Parte 1: Blockchain y API de bloques
Cómo escribir un contrato inteligente en Python en la red Ontology. Parte 1: Blockchain y API de bloques
Esta es la primera parte de una serie de tutoriales sobre la creación de contratos inteligentes de Python en la red blockchain de Ontology utilizando la herramienta de desarrollo de contratos inteligentes. SmartX.
En este artículo, comenzaremos a familiarizarnos con la API de contrato inteligente de Ontology. La API de contrato inteligente de Ontology se divide en 7 módulos:
API de bloques y cadenas de bloques,
API de tiempo de ejecución,
API de almacenamiento,
API nativa,
API de actualización,
API del motor de ejecución y
API de llamadas estáticas y dinámicas.
Blockchain & Block API es la parte principal del sistema de contrato inteligente de Ontology. La API Blockchain admite operaciones básicas de consulta de blockchain, como obtener la altura actual del bloque, mientras que Block API admite operaciones básicas de consulta de bloques, como consultar la cantidad de transacciones para un bloque determinado.
¡Empecemos!
Primero, cree un nuevo contrato en SmartXy luego siga las instrucciones a continuación.
1. Cómo utilizar la API de cadena de bloques
Los enlaces a funciones de contratos inteligentes son idénticos a los enlaces de Python. Puede introducir las funciones correspondientes según sea necesario. Por ejemplo, la siguiente declaración presenta una función GetHeight para obtener la altura del bloque actual y una función GetHeader para obtener el encabezado del bloque.
from ontology.interop.System.Blockchain import GetHeight, GetHeader
ObtenerAltura
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, omitiremos la función principal por conveniencia, 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) # print height
return height #return height after running the function
ObtenerEncabezado
GetHeader se usa para obtener el encabezado del bloque, el parámetro es el número de serie del bloque en la cadena de bloques. 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
Obtener transacción por hash
GetTransactionByHash se utiliza para obtener una transacción a través de un hash de transacción. El hash de la transacción se envía a Obtener transacción por hash como parámetros en formato bytearray. La clave de esta función es convertir el hash de la transacción en formato hexadecimal al 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 ningún bloque con ese hash de bloque. Tomemos el hash de la transacción en formato hexadecimal como ejemplo para convertirlo al formato bytearray. Un ejemplo se ve así:
Los desarrolladores pueden realizar este paso utilizando la herramienta de conversión de números hexadecimales (little endian) proporcionada por SmartX.
Esto se puede hacer usando la herramienta de conversión String Byte Array proporcionada por SmartX. Finalmente, convierta el bytearray resultante en una cadena similar:
Los desarrolladores pueden usar la función GetContract para obtener un contrato a través del hash del contrato. El proceso de conversión de hash de contrato es el mismo que el proceso de conversión de hash de transacción mencionado anteriormente.
GetBlock se utiliza para obtener un bloque. Hay dos formas de obtener un bloque específico.
1. Obtenga la altura bloque por bloque:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block
2. Obtenga un hash bloque por bloque:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)
2. Cómo usar la API de bloques
Hay tres funciones disponibles en Block API: ObtenerTransacciones, ObtenerCuentaTransaccionesY ObtenerTransacciónPorÍndice. Los desglosaremos uno por uno.
ObtenerCuentaTransacciones
GetTransactionCount se utiliza para obtener el número de transacciones de 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
ObtenerTransacciones
Los desarrolladores pueden usar la función GetTransactions para obtener todas las transacciones en un bloque determinado.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions
def demo():
block=GetBlock(1408)
txs=GetTransactions(block)
return txs
ObtenerTransacciónPorÍndice
GetTransactionByIndex se usa para obtener una transacción específica en un bloque dado.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # index starts from 0.
return tx
Puede encontrar una guía completa en nuestro GitHub.
Epílogo
Blockchain & Block API es una parte indispensable de los contratos inteligentes, ya que 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 cómo interactúan con la cadena de bloques de Ontology.
El artículo fue traducido por los editores de Hashrate&Shares especialmente para OntologyRussia. клик
¿Eres desarrollador? Únase a nuestra comunidad tecnológica en Discord. Además, eche un vistazo a Centro de desarrolladores en nuestro sitio web, donde puede encontrar herramientas para desarrolladores, documentación y más.