46 / 736STALE

Stale Block

Un bloque válido fuera de la cadena principal

Un Stale Block es un bloque válido de Bitcoin que queda en una rama secundaria. Puede ocurrir sin fraude: dos mineros encuentran bloques casi al mismo tiempo y la red acaba continuando por una sola de esas ramas.

Un Stale Block cumple las reglas de Bitcoin, pero no pertenece a la cadena activa: el historial que un nodo, un ordenador que verifica bloques y transacciones, utiliza para contar confirmaciones y determinar qué fondos pueden gastarse. La elección depende del trabajo de minería acumulado por las ramas válidas. Para quien recibe un pago, esto puede significar perder una confirmación y volver a esperar, no perder automáticamente sus bitcoins.

Imaginemos a dos mineros, Anna y Pavel. Ambos trabajan sobre el mismo último bloque. Anna encuentra uno nuevo, pero antes de que la noticia llegue a Pavel, él también encuentra el suyo. Los dos pueden ser válidos, aunque incluyan conjuntos de transacciones algo distintos. Los nodos que verifican bloques y transacciones reciben la información sobre los bloques en diferente orden. Durante un tiempo siguen extremos distintos de la cadena. Cuando una rama válida acumula más trabajo y los nodos la verifican, pasan a seguirla. Al bloque que queda en la rama abandonada lo llamamos Stale Block. [1]

Bitcoin necesita un único historial para que los mismos fondos no puedan gastarse dos veces con éxito. Por eso no basta con comprobar que cada bloque cumple las reglas por separado. El nodo también debe elegir qué rama válida seguirá. Son dos cuestiones distintas: la validez del bloque y la selección de la cadena. Un Stale Block puede tener una prueba de trabajo válida (Proof of Work), transacciones correctas y firmas válidas, y aun así quedar fuera del historial elegido. Eso no lo convierte en un bloque defectuoso o fraudulento. [1] [2]

Supongamos que el bloque de Pavel contenía tu pago y la cartera mostraba una confirmación. Si acaba ganando la rama de Anna, el resultado depende de lo que contenga. La misma transacción puede estar también en ella y seguir confirmada. Si no, puede regresar al Mempool, la lista local de transacciones sin confirmar de un nodo, y esperar otro bloque. No está garantizado que vuelva al Mempool: la transacción debe seguir siendo admisible y no entrar en conflicto con el nuevo historial. Si este ya incluye otra transacción que gasta los mismos fondos, el pago original no puede confirmarse a la vez en él. [2]

Un pago ordinario no es lo mismo que la Coinbase Transaction, la primera transacción del bloque, que asigna la recompensa al minero. Esta incluye bitcoins recién emitidos y comisiones. Si el bloque de Pavel queda fuera de la cadena activa, su recompensa coinbase no puede gastarse en ese historial. Tampoco pasa al Mempool como un pago ordinario. Mientras tanto, Pavel no recupera la electricidad consumida. Por eso a los mineros les importa tanto encontrar un bloque como conseguir que los demás lo conozcan pronto. [1] [2]

Algunos artículos y exploradores llaman Orphan Block a un Stale Block. Los términos se usan como sinónimos, pero conviene distinguir su significado más preciso. Un Orphan Block es un bloque cuyo predecesor el nodo aún desconoce, por lo que todavía no puede conectarlo. En un Stale Block, el predecesor puede ser conocido y el bloque válido; simplemente está fuera de la rama elegida. También se llama orphan a una transacción cuando al nodo le faltan transacciones anteriores necesarias para verificar sus entradas. Hay que fijarse en qué sentido utiliza la palabra cada fuente. [1]

Si un nodo ya utilizaba el bloque de Pavel y lo sustituye por la rama de Anna, realiza un Reorg: cambia parte del historial que considera activo. De ahí que pueda variar el número de confirmaciones de la cartera. Una carrera breve como la del ejemplo puede darse entre mineros honestos. Sin embargo, un atacante puede intentar aprovechar un cambio de historial para un Double Spend: imponer otro pago que gaste los mismos fondos. Un Stale Block por sí solo no demuestra esa intención. Hay que examinar los hechos y las posibles transacciones en conflicto. [1] [2]

La noticia de un nuevo bloque no llega instantáneamente a todo el mundo. Cuanto más tarda, más tiempo pueden seguir otros mineros trabajando sobre el mismo predecesor sin saberlo. Importan la velocidad de transmisión, las conexiones entre nodos y el tiempo de propagación respecto al intervalo entre bloques. Stale Rate es la proporción de bloques válidos encontrados que no permanecen en la cadena activa. No es un porcentaje fijo establecido por Bitcoin. Al comparar cifras, también cuentan el periodo observado y los bloques que el observador pudo detectar. [1] [3]

La especificación BIP152 describe Compact Block Relay. Un nodo suele conocer ya, a través de su Mempool, la mayoría de las transacciones del bloque nuevo. No hace falta enviar de nuevo todo su contenido: unos identificadores cortos permiten reconstruir el bloque con los datos disponibles y solicitar las transacciones que falten. Esto ahorra ancho de banda y, en condiciones adecuadas, permite conocer antes el nuevo bloque. Mejora la transmisión, sin cambiar las reglas de validez. No puede impedir por completo que dos bloques se encuentren casi a la vez. [3]

El trabajo acumulado de una rama se llama chainwork. No mide la electricidad realmente consumida ni cuenta votos según el número de ordenadores. Cada bloque aporta un valor derivado de la dificultad de su Proof of Work, la prueba del trabajo de minería. Por eso, “gana la cadena más larga” es menos preciso que “gana la rama válida con más chainwork”. El nodo debe verificar las reglas: ni siquiera mucho trabajo convierte transacciones inválidas en válidas. Además, stale describe la relación de un bloque con el historial elegido en ese momento por un nodo concreto. [1] [2]

Un explorador de bloques ofrece un resumen útil, pero muestra la visión de ese servicio. Tu propio Full Node, un nodo que verifica las reglas, permite consultar el historial que has aceptado de forma independiente. Si el nodo conserva los datos del bloque, getblock de Bitcoin Core devuelve confirmations: -1 cuando ese bloque no pertenece a la cadena activa. Si faltan los datos, por ejemplo porque el modo pruning los eliminó para ahorrar espacio, el comando devuelve un error. Ese dato no demuestra por sí solo que haya superado todas las comprobaciones de validez. Para situarlo, revisa también su hash —su identificador—, el bloque anterior, la altura (el número de bloques anteriores) y el chainwork; comprueba aparte el destino de cada pago. Dos bloques pueden tener la misma altura y distinto hash. [4] [5]

Para obtener la imagen más completa, lee esta entrada junto con Reorg, Confirmación, Block, Block Header, Proof of Work, Minería. También enlazan con esta entrada Reorg, Mining Pool, Hashrate, Selfish Mining.

DOC · 001Bitcoin Developer Guide — Block ChainDocumentación DOC · 002Bitcoin Core v29.0 — chain activation and mempool reconciliationFuente primaria DOC · 003BIP 152 — Compact Block RelayEspecificación DOC · 004Bitcoin Core v29.0 — getblockDocumentación DOC · 005Bitcoin Core v29.0 — block RPC implementationFuente primaria
Revisado: Fuentes primero · No es asesoramiento financiero