What is a transaction receipt in Ethereum?

Recibos de Transacción Ethereum: La Guía Definitiva

10/03/2022

Valoración: 4.44 (10928 votos)

Cuando realizas una operación en la red Ethereum, ya sea enviar ETH, interactuar con un contrato inteligente o acuñar un NFT, presionas "enviar" y esperas a que la magia suceda. Pero, ¿cómo sabes realmente qué ocurrió? ¿Tu transacción fue exitosa? ¿Cuánto gas consumió exactamente? La respuesta a todas estas preguntas y más se encuentra en un documento digital fundamental: el recibo de transacción. Este no es solo un simple comprobante; es el informe detallado y verificado por la blockchain sobre el resultado de tu operación, una pieza clave para la transparencia y la funcionalidad del ecosistema Ethereum.

What is a transaction receipt in Ethereum?
The transaction receipt response object includes the following fields: status : The status of the transaction (e.g., success or failure). gasUsed : The amount of gas consumed by the transaction. logs : The logs generated by the transaction (if any).

En esta guía completa, desglosaremos todo lo que necesitas saber sobre los recibos de transacción en Ethereum. Exploraremos qué son, qué información vital contienen, cómo puedes obtenerlos tanto como usuario como desarrollador, y por qué son indispensables para construir y utilizar aplicaciones descentralizadas de manera segura y eficiente.

Índice de contenido

¿Qué es Exactamente un Recibo de Transacción en Ethereum?

Un recibo de transacción en Ethereum (Transaction Receipt) es un objeto de datos que se genera después de que una transacción ha sido procesada, validada e incluida en un bloque minado en la blockchain. Piénsalo como el ticket o factura oficial que recibes después de una compra en una tienda. Mientras que la transacción en sí misma es la *solicitud* de una operación, el recibo es la *prueba* de que esa operación se llevó a cabo y cuál fue su resultado final.

Este documento es crucial porque contiene el desenlace de la transacción. Confirma si la operación tuvo éxito o si, por el contrario, resultó en un fracaso. Además, proporciona detalles forenses sobre su ejecución, como la cantidad de gas que se utilizó y los eventos (logs) que emitió un contrato inteligente durante el proceso. Sin los recibos, los desarrolladores no podrían construir aplicaciones que reaccionen a los cambios en la blockchain, y los usuarios no tendrían una forma definitiva de verificar el resultado de sus acciones.

Anatomía de un Recibo de Transacción: Desglosando sus Componentes

Un recibo de transacción está compuesto por varios campos, cada uno con una pieza de información específica sobre la ejecución de la transacción. Comprender estos campos es esencial para interpretar correctamente lo que sucedió. A continuación, presentamos una tabla detallada con los componentes más importantes:

Campo Descripción
transactionHash El hash único de 66 caracteres (incluyendo '0x') que identifica la transacción. Es el mismo hash que obtienes al enviarla.
status Indica el resultado de la transacción. Un valor de '1' (o 'true') significa éxito, mientras que '0' (o 'false') significa que falló.
blockHash El hash del bloque en el que se incluyó esta transacción.
blockNumber El número del bloque en el que se incluyó esta transacción. Es útil para saber cuántas confirmaciones tiene.
from La dirección de la billetera que envió la transacción.
to La dirección del destinatario. Puede ser otra billetera o la dirección de un contrato inteligente.
gasUsed La cantidad total de unidades de gas consumidas por esta transacción específica.
cumulativeGasUsed La suma del gas utilizado por todas las transacciones en el mismo bloque hasta este punto (incluida esta).
effectiveGasPrice El precio real por unidad de gas que se pagó. La tarifa total de la transacción se calcula como `gasUsed * effectiveGasPrice`.
contractAddress Si la transacción creó un nuevo contrato inteligente, este campo contendrá la dirección de ese nuevo contrato. Si no, será nulo.
logs Un array de objetos 'log'. Estos son eventos emitidos por un contrato inteligente durante la ejecución de la transacción. Son fundamentales para las dApps.
logsBloom Un filtro de Bloom que permite una búsqueda rápida y eficiente de los logs sin tener que recorrer cada uno de ellos.
transactionIndex La posición o índice de la transacción dentro del bloque.

Un Vistazo Profundo a los 'Logs' (Eventos)

El campo `logs` merece una mención especial. Cuando un desarrollador escribe un contrato inteligente, puede programarlo para que "emita eventos" en puntos clave de su ejecución. Por ejemplo, un contrato de token ERC-20 emite un evento `Transfer` cada vez que los tokens se mueven de una cuenta a otra. Estos eventos se registran en el campo `logs` del recibo de la transacción. Las aplicaciones descentralizadas (dApps) y los servicios de indexación escuchan estos eventos para actualizar sus bases de datos y mostrar la información correcta a los usuarios, sin tener que consultar constantemente el estado del contrato.

¿Cómo Obtener un Recibo de Transacción?

Existen principalmente dos formas de obtener un recibo de transacción, dependiendo de si eres un usuario final o un desarrollador construyendo una aplicación.

How to track an Ethereum transaction?
Step-by-step instructions to find an ETH transaction From the app's home screen, tap on the Ethereum wallet the transaction was made from. You should then see a list of transactions. Tapping on a transaction will display more details, such as whether the transaction has been confirmed or is still pending.

Método 1: Usando Exploradores de Bloques (La Forma Sencilla)

Para la mayoría de los usuarios, la forma más fácil de ver un recibo es a través de un explorador de bloques como Etherscan. El proceso es muy simple:

  1. Obtén el Hash de la Transacción (TxHash): Después de enviar una transacción desde tu billetera (como MetaMask, Trust Wallet, etc.), la aplicación te proporcionará un hash de transacción.
  2. Visita un Explorador de Bloques: Ve a un sitio web como `https://etherscan.io/`.
  3. Busca el TxHash: Pega el hash de tu transacción en la barra de búsqueda y presiona Enter.
  4. Analiza los Resultados: Serás llevado a una página con todos los detalles de tu transacción. La información que ves allí, como el estado ('Success' o 'Fail'), el bloque en el que se incluyó, y el gas utilizado, se extrae directamente del recibo de la transacción.

Aquí también puedes ver el número de "confirmaciones", que es simplemente el número de bloques que se han minado después del bloque que contiene tu transacción, ofreciendo una mayor seguridad de su finalidad.

Método 2: Para Desarrolladores - Vía Programática

Los desarrolladores que construyen aplicaciones necesitan obtener esta información de forma automática. Esto se hace consultando un nodo de Ethereum a través de una llamada RPC (Remote Procedure Call) al endpoint `eth_getTransactionReceipt`. Se pueden utilizar varias librerías y SDKs para facilitar este proceso.

Por ejemplo, utilizando el SDK de Fireblocks, un desarrollador puede recuperar un recibo con unas pocas líneas de código. Esto es crucial para la automatización de procesos, como confirmar un depósito de un usuario o verificar que una acción en un contrato se ejecutó correctamente.

A continuación, un ejemplo de cómo se haría con el SDK de Fireblocks en TypeScript:

// Primero, se importa e inicializa el SDK import { Fireblocks, BasePath } from '@fireblocks/ts-sdk'; const privateKey = '...'; // Tu clave privada de la API de Fireblocks const apiKey = '...'; // Tu clave de la API de Fireblocks const fireblocksSdk = new Fireblocks({ apiKey, basePath: BasePath.US, secretKey: privateKey, }); // Luego, se llama a la función para obtener el recibo async function obtenerRecibo() { const baseAssetId = 'ETH'; // ID del activo base para Ethereum const txHash = '0x123456...'; // El hash de la transacción que quieres consultar try { const receipt = await fireblocksSdk.getTransactionReceipt(baseAssetId, txHash); console.log('Recibo de la transacción:', receipt); } catch (error) { console.error('Error al obtener el recibo:', error); } } obtenerRecibo(); 

Este enfoque programático es el pilar de las dApps, permitiéndoles reaccionar a los resultados de las transacciones y mantener una interfaz de usuario actualizada y fiable.

Recibo vs. Transacción: ¿Cuál es la Diferencia?

Es común confundir el objeto de la transacción con el recibo de la transacción. Aunque están intrínsecamente ligados, representan dos etapas diferentes del proceso.

How to check ETH confirmations?
HOW TO CHECK YOUR ETH TRANSACTIONS , Go to https://etherscan.io/ , Fill your Txhash (Address/ IP / SHA hash) ** Txhash can be found from > "My Account" > "Transaction history" > "Crypto". , You will be redirected to the transaction summary page.
Objeto de Transacción Recibo de Transacción
Representa la intención de realizar una acción. Representa el resultado de esa acción.
Se crea y firma por el usuario antes de ser enviada a la red. Es generado por la red después de que la transacción es minada.
Contiene campos como `gasLimit` y `maxFeePerGas` (lo que estás dispuesto a pagar). Contiene campos como `gasUsed` y `effectiveGasPrice` (lo que realmente se pagó).
No contiene información sobre el éxito o el bloque de inclusión. Su propósito principal es detallar el `status`, `blockNumber`, `logs`, etc.

Preguntas Frecuentes (FAQ)

¿Qué pasa si no encuentro un recibo para mi transacción?

Si buscas un hash de transacción y no encuentras un recibo, lo más probable es que la transacción aún esté pendiente (en la mempool, esperando a ser minada) o que nunca haya sido transmitida correctamente a la red. Revisa el estado en tu billetera y, si persiste, es posible que necesites reenviarla.

¿El `gasUsed` es lo mismo que la tarifa total que pagué?

No. `gasUsed` es la cantidad de unidades de computación que tu transacción consumió. La tarifa total (en ETH) que pagaste se calcula multiplicando el `gasUsed` por el `effectiveGasPrice` (el precio por unidad de gas). Por ejemplo, si `gasUsed` es 21,000 y `effectiveGasPrice` es 20 Gwei, la tarifa total es 420,000 Gwei (o 0.00042 ETH).

¿Puedo obtener un recibo para una transacción fallida?

¡Sí! Una transacción fallida también se incluye en la blockchain. Consume gas (ya que los mineros realizaron el trabajo computacional antes de que fallara) y, por lo tanto, genera un recibo. En este caso, el campo `status` del recibo será '0' (o 'false'), indicando el fallo. Pagarás la tarifa de gas incluso si la transacción no logró su objetivo.

¿Todos los recibos de transacción tienen 'logs'?

No. Solo las transacciones que interactúan con un contrato inteligente que está programado para emitir eventos tendrán objetos en el campo `logs`. Una simple transferencia de ETH de una billetera a otra, por ejemplo, no generará ningún log.

Conclusión

El recibo de transacción es mucho más que una simple confirmación. Es un registro inmutable y detallado que proporciona una transparencia radical sobre cada operación en la red Ethereum. Para los usuarios, es la herramienta definitiva para verificar sus transacciones y comprender los costos asociados. Para los desarrolladores, es un componente indispensable para construir aplicaciones robustas, interactivas y seguras que respondan en tiempo real a la actividad de la blockchain. Entender cómo leer e interpretar un recibo de transacción es, en esencia, aprender a hablar el lenguaje de la verdad verificable de Ethereum.

Si quieres conocer otros artículos parecidos a Recibos de Transacción Ethereum: La Guía Definitiva puedes visitar la categoría Blockchain.

Subir