
Este es un tutorial oficial publicado anteriormente en el blog Ontology Medium
Emocionado de publicarlo para los lectores de Habr. Siéntase libre de hacer cualquier pregunta relacionada y sugerir un mejor formato para los materiales del tutorial.
Prólogo
En este artículo, comenzaremos a presentar el contrato inteligente API de Ontología. La API de contrato inteligente de Ontology se divide en 7 módulos:
En este artículo, presentaremos
Blockchain & Block API , que es la parte más básica del sistema de contrato inteligente de Ontology. La API de Blockchain admite operaciones básicas de consulta de blockchain, como obtener la altura actual del bloque, mientras que la API de Block admite operaciones básicas de consulta de bloque, como consultar el número de transacciones para un bloque determinado.
¡Empecemos!Primero, cree un nuevo contrato en
SmartX y luego siga las instrucciones a continuación.
1. Cómo usar la API Blockchain
Las referencias a las funciones de contrato inteligente son idénticas a las referencias de Python. Los desarrolladores pueden introducir las funciones apropiadas 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, GetHeader
1.1. Getheight
Puede usar GetHeight para obtener la última altura de bloque, 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)
1.2 GetHeader
Puede usar GetHeader para obtener el encabezado del bloque, y el parámetro es la altura del bloque de un bloque. Aquí hay 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
1.3 GetTransactionByHash
Puede usar la función
GetTransactionByHash para obtener transacciones a través del hash de transacciones. El hash de la transacción se envía a GetTransactionByHash como parámetros en formato bytearray. La clave de esta función es cómo convertir un hash de transacción en formato hexadecimal en un hash de transacción en formato bytearray. Este es un paso importante. De lo contrario, obtendría un error que indica que no hay bloque de este hash de bloque.
Tomemos el hash de la transacción en formato hexadecimal como ejemplo para convertirlo al formato bytearray. El ejemplo es el siguiente:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1
Primero, invierta el hash de la transacción:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279
Los desarrolladores pueden implementar este paso con la herramienta de conversión
Número hexadecimal (little endian) <--> Número proporcionado por SmartX.
Luego, conviértalo a 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}
Los desarrolladores pueden hacer esto con la herramienta de conversión
String <--> Byte Array proporcionada por SmartX. Finalmente, convierta el bytearray resultante en la cadena correspondiente:
\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
A continuación se muestra un ejemplo de la función
GetTransactionByHash que obtiene una transacción a través de un hash de transacción:
from ontology.interop.System.Blockchain import GetTransactionByHash def demo():
1.4 GetTransactionHeight
Los desarrolladores pueden usar la función
GetTransactionHeight para obtener la altura de la transacción a través del hash de la transacción. Tomemos el hash en el ejemplo anterior:
from ontology.interop.System.Blockchain import GetTransactionHeight def demo():
1.5 GetContract
Puede usar la función GetContract para obtener un contrato a través del hash del contrato. El proceso de conversión del hash de contrato es coherente con el proceso de conversión de hash de transacción mencionado anteriormente.
from ontology.interop.System.Blockchain import GetContract def demo():
1.6 GetBlock
Puede usar la función GetBlock para obtener el 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, que son
GetTransactions, GetTransactionCount y GetTransactionByIndex . Los presentaremos uno por uno.
2.1 GetTransactionCount
Puede usar la función
GetTransactionCount 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
2.2 GetTransactions
Puede 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
2.3 GetTransactionByIndex
Puede usar la función
GetTransactionByIndex para obtener transacciones específicas en un bloque determinado.
from ontology.interop.System.Blockchain import GetBlock from ontology.interop.System.Block import GetTransactionByIndex def demo(): block=GetBlock(1408) tx=GetTransactionByIndex(block,0)
Encuentra el tutorial completo en nuestro GitHub
aquí .
Epílogo
Blockchain & Block API es la parte más indispensable de los contratos inteligentes, ya que puede usarlos para consultar datos de blockchain y bloquear datos en contratos inteligentes. En los próximos artículos, discutiremos cómo usar otras API para explorar su interacción con la cadena de bloques de Ontology.
¿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íaGithub /
discordiaTelegram (
inglés /
ruso )
Twitter /
Reddit /