Bloques y Cabeceras
src/primitives/block.h: CBlockHeader (80 bytes: versión, hash previo, raíz Merkle, timestamp, nBits, nonce) y CBlockLocator.
Árbol de Merkle
src/consensus/merkle.cpp. Miles de transacciones se condensan en un hash de 32 bytes en la cabecera del bloque. Permite probar que una transacción existe en un bloque.
Árbol binario: cada tx se hashea dos veces (doble SHA256). Pares se concatenan y hashean. Impar: se duplica la última. ComputeMerkleRoot hace el trabajo.
Explorar árbol de Merkle en profundidadÁrbol de Merkle en Bitcoin
Selecciona una transacción para ver su prueba
Miles de transacciones condensadas en 32 bytes en la cabecera del bloque. Permite probar inclusión sin descargar todo el bloque.
Cadena de Bloques
Cada cabecera incluye el hash del bloque anterior. Modificar el pasado requiere recalcular toda la cadena. Computacionalmente prohibitivo.
Prueba de Trabajo
src/pow.h y pow.cpp: GetNextWorkRequired, CalculateNextWorkRequired, CheckProofOfWork. Ajuste de dificultad cada 2,016 bloques.
Validación
src/validation.cpp es uno de los archivos más importantes. AcceptToMemoryPool: lógica para aceptar transacciones en el mempool. CheckBlock: comprobaciones sin contexto. ConnectBlock: comprobaciones pesadas con contexto.
Si CheckBlock falla, sales antes de las verificaciones pesadas de ConnectBlock.
El Conjunto UTXO
src/coins.h y coins.cpp. Caché en memoria de alto rendimiento de salidas no gastadas. Chainstate = estado global de quién posee qué.
¿Qué es la raíz de Merkle en un bloque?
Click para revelar
¿Qué es el Chainstate?
Click para revelar
Checkpoint
¿Por qué CheckBlock se ejecuta antes que ConnectBlock?