¿Cuándo volverá a subir Ethereum?

Guía Completa sobre Transacciones en Ethereum

10/07/2021

Valoración: 4.13 (2635 votos)

En el corazón del vasto y descentralizado universo de Ethereum, existe un concepto fundamental que actúa como el torrente sanguíneo de toda la red: la transacción. Mientras que cualquiera puede consultar datos de la blockchain, como el saldo de una billetera, realizar cualquier cambio, por pequeño que sea, requiere una acción específica. Esa acción es una transacción, el único vehículo capaz de modificar el estado del gran ordenador mundial que es Ethereum. En este artículo, desglosaremos todo lo que necesitas saber sobre ellas, desde su concepto más básico hasta su arquitectura interna.

¿Qué es una transferencia de Ethereum?
Las transacciones de Ethereum implican el envío de ether o tokens de una dirección a otra, con comisiones pagadas en gas para incentivar a los mineros a procesar la transacción en la cadena de bloques .
Índice de contenido

Ethereum: Una Máquina de Estados Impulsada por Transacciones

Para entender realmente qué es una transacción, primero debemos ver a Ethereum como lo que es: una máquina de estados basada en transacciones. Imagina un registro contable global, al que llamamos el "estado mundial" (World State). Este estado contiene la información de todas las cuentas: sus saldos, el código de los contratos inteligentes, su almacenamiento, etc.

Este estado mundial no es estático; evoluciona constantemente. ¿Y qué provoca esa evolución? Las transacciones. Cada bloque que se añade a la cadena de Ethereum es, en esencia, un paquete de transacciones validadas. Cuando un nuevo bloque se procesa, cada transacción dentro de él se ejecuta en orden, modificando el estado mundial y llevándolo de un estado (σt) a uno nuevo (σt+1). Por lo tanto, las transacciones son las únicas instrucciones que pueden provocar un cambio de estado en Ethereum.

¿Qué es Exactamente una Transacción de Ethereum?

Una transacción en Ethereum es una acción iniciada por una EOA (Externally-Owned Account), es decir, una cuenta controlada por un ser humano a través de una clave privada, no por un contrato. Es una instrucción criptográficamente firmada que demuestra la intención del propietario de la cuenta de realizar un cambio.

Por ejemplo, si Carlos quiere enviar 1 ETH a Ana, la cuenta de Carlos debe ser debitada y la de Ana acreditada. Esta acción que modifica el estado de ambas cuentas se encapsula dentro de una transacción. Esta transacción se transmite a la red, es incluida por un validador en un bloque y, una vez que el bloque se confirma, el cambio de estado se vuelve permanente en la blockchain.

Tipos de Cuentas en Ethereum

Es crucial entender que en Ethereum existen dos tipos de cuentas, ya que las transacciones se originan en una y pueden interactuar con ambas:

  • Cuentas de Propiedad Externa (EOA): Son las cuentas que la mayoría de usuarios conocen. Están controladas por una clave privada y son las únicas que pueden iniciar transacciones. Si tienes una billetera como MetaMask, tienes una EOA.
  • Cuentas de Contrato: Estas cuentas no tienen una clave privada. En su lugar, están controladas por el código que contienen (un contrato inteligente). No pueden iniciar una transacción por sí mismas, pero pueden reaccionar a transacciones enviadas hacia ellas, ejecutando su código y realizando acciones complejas, como interactuar con otros contratos o enviar ETH.

La Anatomía Detallada de una Transacción

Cada transacción de Ethereum es un objeto de datos que contiene varios campos importantes. A continuación, desglosamos su arquitectura, basándonos en las transacciones modernas (Tipo 2, compatibles con EIP-1559):

  • nonce: Un contador que indica el número de transacciones enviadas desde la dirección del remitente. Comienza en 0 y se incrementa en 1 por cada transacción. Es vital para prevenir que una misma transacción se procese dos veces (ataques de repetición).
  • recipient (o to): La dirección receptora. Si es una EOA, la transacción probablemente transferirá valor. Si es una cuenta de contrato, la transacción ejecutará el código del contrato.
  • value: La cantidad de ETH a transferir del remitente al destinatario, expresada en Wei (la unidad más pequeña de ETH, donde 1 ETH = 10^18 Wei).
  • gasLimit: La cantidad máxima de unidades de gas que el remitente está dispuesto a consumir para esta transacción. El gas es la unidad que mide el trabajo computacional en Ethereum.
  • maxPriorityFeePerGas: Conocida como la "propina para el validador". Es la cantidad máxima de gas que se pagará directamente al validador para incentivar la inclusión de la transacción en un bloque.
  • maxFeePerGas: La tarifa máxima absoluta por unidad de gas que el remitente está dispuesto a pagar. Incluye tanto la tarifa base de la red (que se quema) como la propina al validador.
  • data (o init): Un campo opcional que se utiliza para interactuar con contratos inteligentes. Contiene la instrucción específica (la función a llamar) y los parámetros necesarios. Para una simple transferencia de ETH, este campo suele estar vacío.
  • chainId: Un identificador para la red específica (por ejemplo, 1 para la red principal de Ethereum, 5 para la red de prueba Göerli). Protege contra ataques de repetición en diferentes cadenas compatibles con la EVM.
  • yParity, r, s: Estos tres componentes forman la firma digital. Se generan utilizando la clave privada del remitente y demuestran criptográficamente que el propietario de la cuenta autorizó la transacción. Sin una firma válida, la transacción es rechazada.

Los Dos Tipos Prácticos de Transacciones

En la práctica, las transacciones que un usuario puede iniciar se dividen en dos categorías principales, diferenciadas principalmente por el uso de los campos `to` y `data`.

Tabla Comparativa de Tipos de Transacciones

Característica Llamada de Mensaje (Message Call) Creación de Contrato (Contract Creation)
Objetivo Principal Transferir ETH o interactuar con un contrato existente. Desplegar un nuevo contrato inteligente en la blockchain.
Campo `to` (Destinatario) Contiene la dirección de la EOA o del contrato con el que se interactúa. Se deja vacío o nulo.
Campo `data` Si se interactúa con un contrato, contiene el `calldata` (la firma de la función y los argumentos). Para transferencias simples, está vacío. Contiene el bytecode del contrato inteligente que se va a desplegar.
Resultado en la Red Modifica el estado de una cuenta existente. Crea una nueva cuenta de contrato con una nueva dirección en el estado mundial.

El Misterio del `calldata` Desvelado

Cuando una transacción se dirige a un contrato inteligente, ¿cómo sabe el contrato qué función ejecutar? La respuesta está en el campo `data`, que contiene lo que se conoce como `calldata`.

El `calldata` se construye de una manera muy específica. Por ejemplo, si queremos llamar a una función llamada `depositar(uint256 cantidad)`, el proceso sería:

  1. Tomar la firma de la función: `depositar(uint256)`.
  2. Calcular su hash Keccak-256.
  3. Tomar los primeros 4 bytes (8 caracteres hexadecimales) de ese hash. Esto se conoce como el "selector de función".
  4. Codificar los argumentos (en este caso, la `cantidad`) en formato hexadecimal de 32 bytes y añadirlos después del selector de función.

El resultado final es una cadena de datos hexadecimal que la Máquina Virtual de Ethereum (EVM) puede interpretar para ejecutar la función correcta con los parámetros correctos dentro del contrato de destino.

Preguntas Frecuentes (FAQ)

¿Puede un contrato inteligente iniciar una transacción?

No. Las transacciones, por definición, deben originarse desde una EOA y estar firmadas con una clave privada. Un contrato inteligente puede, sin embargo, realizar "llamadas internas" a otros contratos como parte de la ejecución de una transacción que recibió, pero no puede iniciar una nueva transacción por sí mismo.

¿Por qué necesito pagar ETH (gas) para enviar una transacción?

Cada operación en Ethereum (desde una simple suma hasta almacenar datos) consume recursos computacionales. El gas es la unidad que mide este coste. Al pagar una tarifa de gas, estás compensando a los validadores de la red por el trabajo de procesar y asegurar tu transacción, y también se previene el spam en la red.

¿Qué ocurre si pongo un `gasLimit` demasiado bajo?

Si tu transacción se queda sin gas a mitad de la ejecución, fallará. La operación se revertirá (no se realizará ningún cambio de estado), pero el gas consumido hasta ese punto no se te devolverá. Por eso es importante estimar correctamente el gas necesario.

¿Cuál es la diferencia entre una consulta de lectura y una de escritura?

Una consulta de lectura (como usar `eth_getBalance` para ver un saldo) simplemente pide datos que ya existen en la blockchain. No cambia el estado, no necesita ser firmada y no cuesta gas. Una transacción de escritura (como enviar ETH) modifica el estado, debe ser firmada por una EOA y requiere el pago de una tarifa de gas.

Conclusión

Las transacciones son mucho más que simples transferencias de dinero; son las instrucciones fundamentales que dan vida a Ethereum. Son los ladrillos con los que se construye cada cambio, cada interacción con una dApp y cada nuevo contrato inteligente. Comprender su arquitectura, desde el `nonce` hasta la firma digital y el `calldata`, es esencial para cualquier persona que desee profundizar en el funcionamiento de la blockchain. Aunque herramientas y librerías de alto nivel como Ethers.js o Viem nos abstraen de esta complejidad en el día a día, conocer los mecanismos subyacentes nos convierte en usuarios y desarrolladores más competentes y conscientes del poder que manejamos con cada transacción firmada.

Si quieres conocer otros artículos parecidos a Guía Completa sobre Transacciones en Ethereum puedes visitar la categoría Ethereum.

Subir