
Esta es la primera parte de una serie de artículos educativos sobre cómo crear contratos inteligentes en Python en la red blockchain de Ontology utilizando la herramienta de desarrollo de contratos inteligentes. .
En este artículo, comenzaremos a familiarizarnos con la API de contratos inteligentes de Ontology. La API de contratos inteligentes de Ontology se divide en 7 módulos:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API y
- Static & Dynamic Call API.
Blockchain & Block API es la parte principal del sistema de contratos inteligentes de Ontology. La API de Blockchain admite operaciones básicas de consulta blockchain, como la obtención de la altura actual del bloque, mientras que la API de Block admite operaciones básicas de consulta de bloques, como la solicitud de la cantidad de transacciones para un bloque dado.
¡Vamos a empezar!
Primero, crea un nuevo contrato en , y luego sigue las instrucciones a continuación.
1. Cómo usar la API de Blockchain
Los enlaces a las funciones de los contratos inteligentes son idénticos a los enlaces de Python. Puedes introducir las funciones correspondientes según sea necesario. Por ejemplo, la siguiente instrucción introduce GetHeight, la función para obtener la altura actual del bloque, y GetHeader, la función para obtener el encabezado del bloque.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight se utiliza para obtener el último número secuencial del bloque en la blockchain, como se muestra en el ejemplo a continuación. En el último ejemplo, por conveniencia, omitiré la función Main, pero puedes 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 functionGetHeader
GetHeader se utiliza para obtener el encabezado del bloque, cuyo parámetro es el número secuencial del bloque en la blockchain. 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 headerGetTransactionByHash
GetTransactionByHash se utiliza para obtener una transacción mediante el hash de la transacción. El hash de la transacción se envía a GetTransactionByHash como parámetros en formato bytearray. La clave para esta función es convertir el hash de la transacción en formato hex a un hash de transacción en formato bytearray. Este es un paso importante. De lo contrario, recibirías un error que indica que no hay bloque con ese hash. Tomemos un hash de transacción en formato hex, por ejemplo, para convertirlo a formato bytearray. El ejemplo es el siguiente:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Primero, invierte el hash de la transacción:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Los desarrolladores pueden realizar este paso utilizando la herramienta de conversión Hex Number (little endian) que proporciona SmartX.
Luego, convierte el resultado obtenido en 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 mediante la herramienta de conversión String Byte Array que ofrece SmartX. Finalmente, convierte el bytearray obtenido en una cadena similar:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fA continuación se muestra un ejemplo de la función GetTransactionByHash, que obtiene una transacción mediante el hash de la transacción:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight se utiliza para obtener la altura de la transacción mediante el hash de la transacción. Tomemos el hash del ejemplo anterior:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Los desarrolladores pueden utilizar la función GetContract para obtener un contrato mediante el hash del contrato. El proceso de conversión del hash del contrato es similar al proceso de conversión del hash de la transacción mencionado anteriormente.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock se utiliza para obtener un bloque. Hay dos formas de obtener un bloque específico.
1. Obtener un bloque por la altura del bloque:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Obtener un bloque por el hash del bloque:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Cómo utilizar la API de Block
Hay tres funciones disponibles en la API de Block: GetTransactions, GetTransactionCountcomo GetTransactionByIndex. Las analizaremos una por una.
GetTransactionCount
GetTransactionCount se utiliza para obtener la cantidad de transacciones para un bloque dado.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Los desarrolladores pueden utilizar 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 txsGetTransactionByIndex
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) # el índice comienza desde 0.
return txLa guía completa se puede encontrar en nuestro .
Póscrito
La API de Blockchain & Block es una parte indispensable de los contratos inteligentes, ya que puede utilizarlas para solicitar datos del blockchain y datos de bloques en los contratos inteligentes. En los siguientes artículos, discutiremos cómo usar el resto de las API y cómo interactúan con el blockchain de Ontology.
El artículo fue traducido por el equipo de Hashrate&Shares especialmente para OntologyRussia.
¿Eres desarrollador? Únete a nuestra comunidad técnica en . Además, echa un vistazo al en nuestro sitio, allí puedes encontrar herramientas para desarrolladores, documentación y mucho más.
Ontology
- /
- Telegram /
- /
Fuente: habr.com
