Glosario / Transacciones y comisiones
Altura de bloque en el campo Coinbase
- ¿Qué es la altura de bloque en el campo coinbase?
- La altura de bloque en el campo coinbase, sin relación con el exchange Coinbase, es la altura del propio bloque, escrita como los primeros bytes de ese campo, algo que BIP34 exige a todos los bloques desde marzo de 2013.
Se especifica en el BIP-34.
Es la solución más barata de bitcoin a un error real. Antes de la regla, dos bloques con transacciones coinbase idénticas producían ID de transacción idénticos, algo que ocurrió en los bloques 91.842 y 91.880 en 2010. Escribir la altura hace que cada transacción coinbase sea única y permite que cualquiera lea la posición de un bloque en el propio bloque.
Cómo funciona
La altura se guarda como una inserción de datos de script, así que un analizador lee un byte de longitud y después tantos bytes de número como indica ese byte.
El número se escribe en little endian y con codificación mínima, de la misma forma en que el Script de Bitcoin codifica cualquier entero. Con las alturas actuales ocupa tres bytes, así que la inserción de datos se lee 03 y después la altura. Por eso el bloque 840.000, el bloque del halving, abre su campo coinbase con 03 40 d1 0c: una inserción de datos de tres bytes y luego 840.000 con su byte menos significativo primero. Tres bytes cubren todas las alturas hasta 8.388.607, que con bloques de diez minutos queda a más de un siglo, y la codificación pasa sola a cuatro bytes cuando llegue ese día.
BIP34 se desplegó como una bifurcación blanda activada por los mineros (miner-activated soft fork) basada en el número de versión del bloque. Los bloques que declaraban la versión 2 se contaban en una ventana móvil de 1.000: con 750 de los últimos 1.000, un bloque de versión 2 sin su altura pasaba a ser inválido, y con 950 se rechazaba de plano el formato anterior de la versión 1. El último bloque de versión 1 que llegó a aceptarse fue el 227.835, con marca de tiempo del 24 de marzo de 2013, y Bitcoin Core todavía tiene escrita en el código la altura de activación, 227.931.
La regla también reemplazó una comprobación costosa por una gratuita. BIP30 ya prohibía que una transacción nueva reutilizara el ID de otra existente no gastada, pero hacer cumplir esa prohibición suponía una consulta a la base de datos por cada transacción de cada bloque. Una vez que cada transacción coinbase es distinta por construcción, no pueden darse ID duplicados, así que los nodos se saltan esa consulta para todo lo que se minó después del cambio. Una regla de consenso que acelera la validación en lugar de ralentizarla es lo bastante rara como para merecer atención.
Dónde aparece
Cualquier explorador de bloques muestra el campo coinbase decodificado, y la altura es lo primero que aparece en él.
Donde se nota es en la minería. Un pool de minería arma su propia transacción coinbase a partir de la plantilla que le proporciona su nodo, y un pool que introduce una altura equivocada, normalmente mientras compite en una carrera contra un bloque que acaba de llegar, produce un bloque que todos los nodos descartan con un error bad-cb-height. La electricidad está gastada, la prueba de trabajo es válida y la recompensa es nula.
También importa a cualquiera que demuestre algo sobre un bloque sin tener la cadena completa. Un encabezado de bloque no indica su propia altura; esta se averigua contando hacia atrás hasta el bloque génesis. Un bloque completo sí la indica, en un lugar que la raíz de Merkle fija y que, por tanto, la prueba de trabajo también fija, así que una afirmación sobre la altura respaldada por una transacción coinbase y una rama de Merkle se sostiene por sí sola. Las cadenas laterales (sidechains), los servicios de sellado de tiempo y los protocolos de cliente ligero se apoyan todos en esa propiedad.
Altura de bloque en el campo Coinbase frente a altura de bloque
La altura de bloque es una posición en la cadena, un número al que cualquiera puede llegar contando hacia atrás hasta el bloque que Satoshi minó el 3 de enero de 2009. La altura de bloque en el campo coinbase es ese mismo número escrito dentro de los propios datos del bloque porque el consenso lo exige. Una es una observación sobre dónde está un bloque; la otra es un campo en el que un minero puede equivocarse y perder un bloque por ello.