WEB3DEV Español

Cover image for Mejora el Troubleshooting y el monitoreo de contratos inteligentes con Analíticas Avanzadas
Gabriella Alexandra Martinez Viloria
Gabriella Alexandra Martinez Viloria

Posted on

Mejora el Troubleshooting y el monitoreo de contratos inteligentes con Analíticas Avanzadas

Image description

Gana conocimiento detallado en las ejecuciones de contratos inteligentes, fallas de troubleshooting de transacciones, optimización del performance y rastreo de datos específicos.

Trace API es un conjunto de métodos JSON RPC que ayudan a los usuarios de Infura a entender cómo los contratos inteligentes y las transacciones se ejecutan en la blockchain Ethereum. Usando Trace API, los desarrolladores pueden acceder información adicional sobre las transacciones que no están directamente registradas en la blockchain.

Esto desbloquea oportunidades para mejorar DevOps ya que permite a los desarrolladores a debugear, analizar y realizar tareas y funciones específicas, relacionadas a la optimización de contratos inteligentes, seguridad y análisis.

Trace APi provee un conjunto de métodos detallados que permite a los desarrolladores examinar y extraer información detallada sobre las transacciones, bloques e interacciones de contrato en Ethereum.

¿Qué problema Trace API resuelve?

Trace API resuelve el problema de la visibilidad limitada y entender las ejecuciones de contratos inteligentes en Ethereum. Con la habilidad de rastrear transacciones, los desarrolladores pueden examinar con precisión las acciones ejecutadas por la Máquina Virtual de Ethereum (EVM) durante transacciones o un conjunto de transacciones específicas/

Las transacciones de Ethereum envuelven valores de transferencia y ejecuciones de contratos, con el último siendo interacciones complejas que pueden ser complicado de revelar. Mientras los recibos de la transacción proveen un código de estado básico, no tienen información detallada sobre la ejecución del contrato, haciendo que sea difícil determinar las acciones específicas a tomar, las modificaciones de datos y direcciones afectadas.

El rastreo de la EVM a través de Trace API solventa este problema, permitiéndole a los desarrolladores ganar un conocimiento detallado sobre la ejecución del contrato, permitiendo un mejor debugeo, análisis y entendimiento de los contratos inteligentes en la red Ethereum.

¿Cómo Acceder a Infura Trace API?

Para usar Infura Trace API, sigue estos simples pasos:

  1. Regístrate con una cuenta de Infura y actualízala con cualquiera de los planes de pago.
  2. Una vez que tengas una cuenta paga, crea un proyecto API web3.
  3. Accede a tu nueva clave API creada, la cual necesitarás para hacer llamadas API
  4. Usa el endpoint proveído junto a tu clave API para acceder a los métodos Trace API.

Infura, actualmente, soporta los siguientes Trace API en el mainnet de Ethereum, así como las testnets Goerli y Sapolia:

  1. trace_call: Ejecuta una llamada en particular y provee varios rastreos posibles.
  2. trace_callMany: Ejecuta múltiples transacciones es un solo pedido.
  3. trace_block: Retiras los rastreos ejecutados dentro de un bloque en particular.
  4. trace_transaction: Retira todos los rastreos asociados con una transacción dada usando el hash de transacción.
  5. trace_filter: Retira los rastreos que coinciden con un filtro especificado.

Caso de uso 1: Fallo del Troubleshooting de Transacción y Actualización de Usuarios

Cuando usas el método trace_transaction, regresa una respuesta que puede ser más analizada para ganar más conocimiento sobre por qué la transacción falló. Esto puede ser útil para desarrolladores de dapp ya que puedes transmitir esta información a tus usuarios, haciendo que ellos tomen las acciones necesarias.

Por ejemplo, usemos el método Infura trace_transaction para obtener el árbol de rastreo de esta transacción.

Código de pedido:

curl --location 'https://mainnet.infura.io/v3/ \ --header 'Content-Type: text/plain' \ --data '{ "id": 1, "method": "trace_transaction", "jsonrpc": "2.0", "params": [ "0xeb852958eeb1d026b10c6ad3c995520364b83929e1e0908801194f5b680d54ea" ] }

Carga de Respuesta:

{ "jsonrpc": "2.0", "id": 1, "result": [ { "action": { "callType": "call", "from": "0xeecc9674d3600e3feb1b01b9ff7c72ac2e1c560f", "gas": "0x1a0c8", "input": "0xe2bbb158000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037b1d9c38a24b27c", "to": "0xfb063b1ae6471e6795d6ad1fc7f47c1cab1f3422", "value": "0x0" }, "blockHash": "0x89b3ee89b30133dfd67888bf0baeea58b8a52b1beb983efcc7aa771a3fd489af", "blockNumber": 17370663, "error": "out of gas", "result": null, "subtraces": 4, "traceAddress": [], "transactionHash": "0xeb852958eeb1d026b10c6ad3c995520364b83929e1e0908801194f5b680d54ea", "transactionPosition": 110, "type": "call" } ] ... }

Analizando la carga de respuesta, el cual incluye un campo de error que dice “sin gas”, ambos los desarrolladores y el usuario de la dApp ganan información invaluable acerca de por qué esta transacción falló.

Caso de Uso 2: Troubleshooting sobre Problemas con el Performance con las Analíticas Avanzadas

Ganar conocimiento en el número de llamadas de contratos adicionales hechos antes que una transacción se complete, mejora tu habilidad para resolver problemas y para optimizar las mejoras en el performance. Considera una instancia donde un usuario invoca un contrato que, en cambio, invoca otro. Examinar los recibos de la transacción no ofrece una forma fácil para que el desarrollador sepa cuántos contratos inteligentes adicionales están invocados bajo el capó.

Afortunadamente, Trace API viene al rescate ofreciendo un árbol de vista del rastreo de transacciones. Esto permite un análisis profundo sobre el performance del contrato inteligente, observando el número de acciones requeridas para que una transacción se procese, proveyendo información para afinar el performance de tu contrato.

Código de Pedido:

curl --location 'https://mainnet.infura.io/v3/<INFURA API KEY> \ --header 'Content-Type: text/plain' \ --data '{ "id": 1, "method": "trace_transaction", "jsonrpc": "2.0", "params": [ "0x923405094e26b9a616aa7c2b757b5c04c1d65e523f3375e531abb69fc4c2382c" ] }'
Enter fullscreen mode Exit fullscreen mode

Carga de respuesta:

{ "jsonrpc": "2.0", "id": 1, "result": [ { "action": { "callType": "call", "from": "0xe67e43b831a541c5fa40de52ab0afbe311514e64", "gas": "0x1b803", "input": "0xe1021f44000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000182178faefbc461fd10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000387e55e5b080b30441e82805224ce50b242efe028df1d63b7953dcc7b654d6d37ea9d16750c58c6c8a528f197120cf5180ac3e21a2baa96393bc40c354991fbe063a754751b6ee8d9f35c34c1f3e44fefe1156661f7356117050bc084636b6f4d", "to": "0x264382b200bc1fe51a9b58f704394de172341418", "value": "0x0" }, "blockHash": "0x37e08159b7961d2ccf83be3d222a821f6be1c5a593854d4c63d1223ecad73bae", "blockNumber": 17370903, "result": { "gasUsed": "0xbeae", "output": "0x000000000000000000000000000000000000000000000905f430b36f66685030" }, "subtraces": 1, "traceAddress": [], "transactionHash": "0x923405094e26b9a616aa7c2b757b5c04c1d65e523f3375e531abb69fc4c2382c", "transactionPosition": 178, "type": "call" }, { "action": { "callType": "call", "from": "0x264382b200bc1fe51a9b58f704394de172341418", "gas": "0x16a44", "input": "0xa9059cbb000000000000000000000000e67e43b831a541c5fa40de52ab0afbe311514e64000000000000000000000000000000000000000000000905f430b36f66685030", "to": "0xd6123271f980d966b00ca4fca6c2c021f05e2e73", "value": "0x0" }, "blockHash": "0x37e08159b7961d2ccf83be3d222a821f6be1c5a593854d4c63d1223ecad73bae", "blockNumber": 17370903, "result": { "gasUsed": "0x7581", "output": "0x0000000000000000000000000000000000000000000000000000000000000001" }, "subtraces": 0, "traceAddress": [ 0 ], "transactionHash": "0x923405094e26b9a616aa7c2b757b5c04c1d65e523f3375e531abb69fc4c2382c", "transactionPosition": 178, "type": "call" } ] }
Enter fullscreen mode Exit fullscreen mode

Cuando vemos los detalles de la respuesta, vemos dos partes en la sección de respuestas. Cada parte representa un paso dado para terminar la transacción inicial. Si miramos de cerca a las partes de “subtraces” del primer paso, vemos el número “1”. Esto implica la existencia de una acción adicional o un rastreo infantil asociado con esa transacción en particular.

Caso de Uso 3: Monitorea direcciones y contratos inteligentes específicos para mejorar tu DevOps

Usando el método trace_filter, puedes capturar eventos específicos o interacciones de contratos inteligentes en la red de Ethereum. Especificando filtros como fromAddress, toAddress, fromBlock y toBlock, puedes retirar un rastreo de transacciones filtrado y eventos que coincidan con tu filtro.

Código de Pedido:

curl --location 'https://mainnet.infura.io/v3/<INFURA API KEY> \ --header 'Content-Type: text/plain' \ --data '{ "id": 1, "method": "trace_filter", "jsonrpc": "2.0", "params": [ { "toBlock": "0xccb943", "fromBlock": "0xccb943", "fromAddress": [ "0xEdC763b3e418cD14767b3Be02b667619a6374076" ], "toAddress": [ "0x7ff4169a6b5122b664c51c95727d87750ec07c80" ] } ] }'
Enter fullscreen mode Exit fullscreen mode

Código de Respuesta:

{ "jsonrpc": "2.0", "id": 1, "result": [ { "action": { "callType": "call", "from": "0xedc763b3e418cd14767b3be02b667619a6374076", "gas": "0x8462", "input": "0x095ea7b30000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "to": "0x7ff4169a6b5122b664c51c95727d87750ec07c84", "value": "0x0" }, "blockHash": "0x351e7c06ec010c8f7e7358eb580238dd23e1e129be96822aa93ebb6da08558e6", "blockNumber": 13416771, "result": { "gasUsed": "0x6009", "output": "0x0000000000000000000000000000000000000000000000000000000000000001" }, "subtraces": 0, "traceAddress": [], "transactionHash": "0x054bbb9fbb855bf23f755e548c7409f45fc5eff8a824b2ad06380bc038d7b049", "transactionPosition": 54, "type": "call" } ] }
Enter fullscreen mode Exit fullscreen mode

Optimiza DevOps y Sigue Construyendo?

Trace API empodera a los desarrolladores de Ethereum con capacidad de análisis avanzadas, permitiéndoles fallos de troubleshoot de transacciones, optimización de performance de contrato inteligente y rastrear datos específicos.

Aprovechando Trace API, los desarrolladores pueden mejorar sus procesos de desarrollo, asegurando mejor seguridad y proveyendo una experiencia de usuario superior para sus dapps.

El acceso a Trace API está disponible sólo para clientes pago. Para empezar a utilizar esta característica, simplemente crea una Cuenta de Infura y procede a actualizar tu cuenta. Esto permitirá empezar a usar Trace API.

Este artículo es una traducción de Kingsley Okonkwo, hecha por Gabriella Martínez. Puedes encontrar el artículo original aquí
Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_es en Twitter.

Discussion (0)