Estructura de Bloques y Cadenas
En esta lección profundizaremos en cómo se construyen los bloques, cómo se enlazan para formar una cadena inmutable y cómo funciona el proceso de validación de transacciones.
Anatomía Detallada de un Bloque
Un bloque es la unidad fundamental de almacenamiento en una blockchain. Contiene dos secciones principales: el header (encabezado) y el body (cuerpo de transacciones).
Block Header
┌─────────────────────────────────────────┐
│ BLOCK HEADER │
├─────────────────────────────────────────┤
│ version → Versión del protocolo│
│ previousHash → Hash bloque anterior │
│ merkleRoot → Raíz del árbol Merkle│
│ timestamp → Marca temporal │
│ difficulty → Dificultad objetivo │
│ nonce → Contador de minado │
│ blockNumber → Número de bloque │
│ gasLimit → Gas máximo (Ethereum)│
│ gasUsed → Gas consumido │
│ stateRoot → Raíz del estado │
└─────────────────────────────────────────┘
Block Body
El cuerpo contiene la lista de transacciones incluidas en el bloque:
┌─────────────────────────────────────────┐
│ BLOCK BODY │
├─────────────────────────────────────────┤
│ Transaction 0 (coinbase/reward) │
│ Transaction 1 │
│ Transaction 2 │
│ ... │
│ Transaction N │
└─────────────────────────────────────────┘
Estructura de una Transacción
Cada transacción en Ethereum contiene:
{
nonce: 42, // Contador de tx del remitente
to: "0x742d35Cc...", // Dirección destino
value: 1000000000000000000, // Cantidad en Wei (1 ETH)
gasLimit: 21000, // Gas máximo a pagar
gasPrice: 20000000000, // Precio por unidad de gas
data: "0x...", // Datos (llamada a contrato)
v, r, s: ... // Firma digital ECDSA
}
Ciclo de vida de una transacción
1. Creación → El usuario crea y firma la transacción
2. Broadcast → Se envía a la red P2P
3. Mempool → Los nodos la almacenan en memoria
4. Selección → Un validador la incluye en un bloque
5. Ejecución → Se ejecuta la transacción
6. Inclusión → El bloque se agrega a la cadena
7. Confirmación → Bloques posteriores la confirman
El Encadenamiento: Hash Linking
Lo que hace una "cadena" de bloques es el enlace criptográfico entre bloques consecutivos:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Bloque 0│◄──│ Bloque 1│◄──│ Bloque 2│
│(Génesis)│ │ │ │ │
│Hash: abc│ │Prev: abc│ │Prev: def│
│ │ │Hash: def│ │Hash: ghi│
└─────────┘ └─────────┘ └─────────┘
Si alguien modifica el Bloque 1:
- Su hash cambia: def → xyz
- El Bloque 2 apunta a "def" → ¡inválido!
- Toda la cadena posterior se invalida
Esta propiedad garantiza la inmutabilidad: para modificar un bloque pasado, habría que recalcular todos los bloques posteriores y convencer a la mayoría de la red.
El Bloque Génesis
El bloque génesis (bloque 0) es el primer bloque de toda blockchain. Es hardcodeado en el software del nodo y no tiene un bloque anterior:
Bloque Génesis de Bitcoin:
- Número: 0
- Timestamp: 2009-01-03 18:15:05
- Transacciones: 1 (coinbase de 50 BTC)
- Mensaje: "The Times 03/Jan/2009 Chancellor on
brink of second bailout for banks"
- Previous Hash: 0000000000000000000000000000000000...
El mensaje de Satoshi en el bloque génesis es una referencia a la crisis financiera de 2008, recordando la motivación original detrás de Bitcoin.
Gas y Fees en Ethereum
En Ethereum, cada operación computacional tiene un costo en gas. El gas es la unidad que mide el trabajo computacional:
Operación Gas
─────────────────────────────
Transferencia ETH 21,000
Almacenar 256 bits 20,000
Operación suma 3
Llamada a contrato ~variable
Deploy de contrato 32,000 + código
Cálculo de costos
Costo Total = Gas Used × Gas Price
Ejemplo:
- Gas Used: 21,000 (transferencia simple)
- Gas Price: 20 Gwei (20 × 10⁹ Wei)
- Costo: 21,000 × 20 Gwei = 420,000 Gwei = 0.00042 ETH
EIP-1559: Base Fee + Priority Fee
Desde la actualización London, Ethereum usa un modelo de fees más predecible:
Fee Total = (Base Fee + Priority Fee) × Gas Used
- Base Fee: ajustado automáticamente por el protocolo
- Priority Fee (tip): propina para el validador
- Base Fee se quema (burn) → reduce la oferta de ETH
Forks: Bifurcaciones
Cuando hay desacuerdo sobre las reglas de la cadena, puede ocurrir un fork:
Soft Fork
Cambio retrocompatible. Los nodos antiguos siguen aceptando los nuevos bloques:
Cadena: ───[A]───[B]───[C]───[D]───
(todos siguen la misma cadena)
Hard Fork
Cambio no retrocompatible. Se crean dos cadenas diferentes:
┌──[C']──[D']── Cadena nueva
Cadena: ──[A]──[B]─┤
└──[C]───[D]── Cadena original
Ejemplos históricos:
- Ethereum → Ethereum Classic (2016): tras el hack de The DAO.
- Bitcoin → Bitcoin Cash (2017): debate sobre el tamaño de bloque.
Confirmaciones
Una transacción se considera más segura cuantos más bloques se construyan encima del bloque que la contiene:
Tu tx en bloque 100:
Bloque 100 → 0 confirmaciones (pendiente)
Bloque 101 → 1 confirmación
Bloque 102 → 2 confirmaciones
...
Bloque 106 → 6 confirmaciones (considerado seguro en Bitcoin)
Bloque 112 → 12 confirmaciones (exchanges suelen requerir esto)
Resumen
Los bloques son estructuras de datos que contienen transacciones enlazadas criptográficamente mediante hashes. El encadenamiento hash garantiza la inmutabilidad, el gas mide el costo computacional, y las confirmaciones proporcionan seguridad probabilística. Comprender esta estructura es fundamental para entender cómo funcionan los smart contracts y las DApps.