77 / 7362017

Guerra del tamaño de bloque

La disputa sobre la capacidad de Bitcoin y quién puede cambiar sus reglas

Entre 2015 y 2017, los participantes de Bitcoin discutieron cómo admitir más pagos sin dificultar la verificación independiente. Una discusión sobre el tamaño de los bloques puso a prueba si desarrolladores, mineros y empresas podían impulsar un cambio sin el acuerdo de los usuarios.

Block Size War designa las disputas sobre la capacidad y las reglas de Bitcoin que culminaron en 2017 con la activación de SegWit, la separación de Bitcoin Cash y la suspensión del fork SegWit2x previsto. Fueron tres acontecimientos distintos, con causas y mecanismos diferentes.

Imaginemos dos necesidades cotidianas. Anna quiere enviar bitcoin sin esperar mucho ni pagar una comisión elevada. Pavel mantiene un nodo completo: un ordenador que comprueba bloques y transacciones por sí mismo. Quiere verificar su dinero sin equipos caros. Ambas necesidades son razonables, pero añadir datos a cada bloque también exige transmitir y comprobar más información. Ese equilibrio estaba en el centro de la Block Size War. Un bloque es un conjunto de transacciones que se añade al historial de pagos compartido por la red. Anna y Pavel son personajes ilustrativos. En el debate real de 2015–2017 participaron desarrolladores, operadores de minería, plataformas de intercambio, proveedores de monederos y usuarios. Discrepaban sobre la capacidad y sobre cómo introducir cambios de forma segura. Bitcoin no tenía un director que pudiera escoger una opción y ordenar a todos que la adoptaran. [1] [11] [13]

Antes de SegWit, las reglas limitaban cada bloque a 1 MB, es decir, 1 000 000 de bytes. No era un número fijo de pagos: las transacciones ocupan espacios diferentes. Se genera un bloque aproximadamente cada diez minutos de media. Si la demanda supera la capacidad, los mineros suelen priorizar las transacciones con tasas de comisión más altas y las demás esperan. Los defensores de bloques mayores querían ampliar directamente la red base y mantener los pagos asequibles. Sus oponentes temían que aumentaran los requisitos de conexión, equipos y propagación rápida de bloques. Si menos personas pudieran verificar por su cuenta, más usuarios dependerían de servicios ajenos. Un límite mayor no acelera por sí solo la creación de bloques ni garantiza comisiones bajas para siempre: también importan la demanda y el uso real del espacio. [1] [2] [13]

Un desarrollador puede escribir software y un minero producir bloques con él. Sin embargo, quien opera un Full Node decide qué reglas comprueba su nodo. Ni siquiera una mayoría de potencia de cálculo puede hacer que un nodo sin modificar acepte un bloque contrario a sus reglas. La potencia ayuda a elegir entre cadenas válidas; no convierte un bloque inválido en válido. Esto tampoco equivale a un voto por nodo en unas elecciones mundiales, ni permite a una persona impedir que otras se marchen. Las empresas deciden qué aceptan; los mineros, qué minan; los usuarios, qué valoran. Unas reglas incompatibles pueden dar lugar a dos redes. Un acuerdo empresarial podía apoyar un cambio, pero no reescribir automáticamente el software y las decisiones de todos. [11] [12]

Las propuestas se documentaban como BIP, siglas de Bitcoin Improvement Proposal. Un BIP explica una propuesta para que otros puedan examinarla y debatirla. Recibir un número no significa que la red la haya adoptado. Gavin Andresen propuso en BIP 101 elevar el límite a 8 MB y aumentarlo después según un calendario. El plan contemplaba aproximadamente duplicarlo cada dos años y fijaba condiciones de activación. Mike Hearn y Andresen defendían Bitcoin XT, un software alternativo que ofrecía esta vía. Publicarlo no equivalía a modificar las reglas de toda la red. Los nodos antiguos rechazarían un bloque superior al límite vigente. Era un Hard Fork: un cambio que ampliaba el conjunto de bloques permitidos y exigía otras reglas para aceptarlos. La discusión dejó de ser solo cuánto espacio añadir. Había que decidir quién migraría, cómo coordinar el cambio y qué ocurriría si una parte importante no estaba de acuerdo. [1] [18] [13]

Eric Lombrozo, Johnson Lau y Pieter Wuille describieron otra vía en BIP 141. SegWit reorganizó los datos de las transacciones e introdujo el peso del bloque, limitado a 4 000 000 weight units. La parte denominada witness contiene, entre otros datos, los que permiten comprobar la autorización para gastar. No desaparecieron ni dejaron de verificarse: recibieron otro tratamiento al calcular el peso. La capacidad depende de la combinación de transacciones, no de permitir simplemente bloques ordinarios de cuatro megabytes. El peso indica cómo se contabilizan los datos dentro del límite del bloque: cada byte de datos base cuenta como 4 unidades, mientras que cada byte adicional relacionado con witness cuenta como 1. Por eso, transacciones del mismo tamaño en bytes pueden consumir distintas cantidades de peso. La capacidad también depende del tipo de transacciones que se utilicen. En las transacciones adecuadas, SegWit también impidió cambiar su identificador mediante modificaciones de los datos de firma. Eso facilitó construir los canales de pago de Lightning Network. Se diseñó como Soft Fork: los nuevos bloques válidos encajan en las reglas antiguas, aunque los nodos antiguos no verifican todas las nuevas restricciones. Bitcoin Core 0.13.1 incluyó el mecanismo de activación; publicar el programa no activó SegWit por sí solo. [2] [3]

El 23 de mayo de 2017, Digital Currency Group publicó el New York Agreement, un acuerdo entre empresas y mineros. Vinculaba el apoyo a SegWit con un Hard Fork a 2 MB en un plazo de seis meses. Este segundo paso se conoció como SegWit2x y se implementó en el proyecto btc1. Para algunos era un compromiso aceptable: cada grupo obtendría parte de lo que pedía. Otros rechazaban tanto el segundo cambio como la forma de impulsarlo. El apoyo de una empresa no representaba automáticamente el consentimiento de todos sus clientes. Bitcoin Core aclaró después que btc1 no era una actualización obligatoria de su programa y que apoyar SegWit no significaba apoyar SegWit2x. Conviene recordarlo al leer noticias de la época: dos cambios incluidos en un acuerdo seguían siendo dos cambios de reglas diferentes. [6] [7] [11]

El autor seudónimo Shaolin Fry propuso BIP 148, un UASF o Soft Fork activado por usuarios. Desde el 1 de agosto de 2017, según Median Time Past, los nodos con esa regla rechazarían bloques que no señalaran apoyo a SegWit, salvo que ya estuviera fijada su activación o estuviera activo. Si la minería y la aceptación de bloques divergían, podía dividirse la red. No era un interruptor sin riesgo accionado por todos a la vez. Median Time Past es el valor central al ordenar las marcas de tiempo de los últimos 11 bloques, no la hora del reloj de cada usuario. La señalización consistía en una marca en la cabecera del bloque que expresaba el apoyo del minero a ese despliegue; la marca no activaba por sí sola las nuevas reglas. James Hilliard describió en BIP 91 una coordinación minera con un umbral menor: 269 de 336 bloques, aproximadamente el 80 %. Una vez en vigor, los participantes rechazarían bloques sin la señal de la implementación original de SegWit. La coordinación de julio redujo el peligro de conflicto alrededor de agosto. No significó que SegWit ya estuviera fijado o activo en julio: seguía su propio mecanismo BIP 9. [4] [5] [9] [19]

Bitcoin Cash se separó el 1 de agosto de 2017. El software Bitcoin ABC admitía bloques mayores para esa rama, entonces con un límite predeterminado de 8 MB. A partir de la separación, ambas redes tenían reglas y monedas distintas. Compartir la historia anterior no permitía transferir libremente pagos posteriores entre BTC y BCH. Bitcoin Cash no era SegWit2x, ni Bitcoin ABC era btc1. Confundirlos mezcla la separación de agosto con otro proyecto suspendido después. También diferían en replay protection: cómo impedir que una transacción se repitiera en la otra cadena. Para el usuario, esto tenía una consecuencia práctica: operar en una rama no debía gastar accidentalmente fondos de la otra. Tampoco era seguro introducir las claves compartidas en cualquier herramienta que prometiera nuevas monedas. [8] [15] [11]

SegWit entró en el estado LOCKED_IN desde el bloque 479 808, el 9 de agosto de 2017. Había terminado el periodo de decisión y faltaba otro de espera antes de aplicar las nuevas reglas. Se activó en el bloque 481 824, el 24 de agosto. Ambas alturas están separadas por 2 016 bloques. La coordinación BIP 91 de julio, la fijación de agosto y la activación fueron, por tanto, acontecimientos diferentes. Quedaba la segunda etapa de SegWit2x, prevista para la altura 494 784. El 8 de noviembre, sus organizadores, encabezados por Mike Belshe, anunciaron la suspensión: según su comunicado, no habían conseguido suficiente acuerdo para una transición fluida. Bitcoin no perdió el SegWit ya activo ni desapareció Bitcoin Cash. Terminó ese intento concreto de convertir el apoyo empresarial y minero en un aumento del límite de Bitcoin. [9] [10] [12] [14] [16] [17]

La disputa mostró que Bitcoin puede cambiar, pero escribir código, reunir firmas empresariales y lograr que se acepten reglas son tareas distintas. No demostró que los desarrolladores carezcan de influencia, que los mineros no importen o que toda decisión futura vaya a terminar igual. La capacidad, la verificación asequible y el acuerdo entre participantes no se resuelven cambiando el nombre de una actualización. Ante una propuesta, pregúntese qué modifica, qué nodos discreparían después y cómo se activaría. Distinga entre propuesta, software publicado y reglas realmente vigentes. Los BIP y el código de la época documentan mecanismos; los comunicados de los distintos grupos, sus posiciones. Ningún comunicado de un participante constituye por sí solo una historia imparcial de todo el conflicto. [1] [6] [11] [12]

Para obtener la imagen más completa, lee esta entrada junto con SegWit, Soft Fork, Hard Fork, Full Node, Bitcoin, Reglas de consenso. También enlazan con esta entrada Soft Fork, Hard Fork, Block Weight, Jeff Garzik.

DOC · 001BIP 101 — Increase maximum block sizeDocumentación DOC · 002BIP 141 — Segregated WitnessDocumentación DOC · 003Bitcoin Core 0.13.1 — Segregated witness releaseDocumentación DOC · 004BIP 148 — Mandatory activation of SegWitDocumentación DOC · 005BIP 91 — Reduced threshold SegWit activationDocumentación DOC · 006Digital Currency Group — Bitcoin Scaling Agreement at Consensus 2017Documentación DOC · 007btc1 — SegWit2x implementation repositoryDocumentación DOC · 008Bitcoin ABC — 0.14.6 releaseDocumentación DOC · 009BIP 9 — Version bits with timeout and delayFuente primaria DOC · 010BIP 9 — Deployment assignmentsFuente primaria DOC · 011Bitcoin Core — Correcting misinformation on Segwit2x and btc1, 18 August 2017Fuente primaria DOC · 012bitFlyer — Policy and stance regarding SegWit2x postponement, 9 November 2017Fuente primaria DOC · 013Mike Hearn — Why is Bitcoin forking? Author essay reprinted by Ars Technica, 18 August 2015Fuente primaria DOC · 014Mike Belshe et al. — Segwit2x suspension, 8 November 2017; message reproduced by BlockTribuneFuente primaria DOC · 015Bitcoin ABC v0.14.6 — Consensus limitsFuente primaria DOC · 016Bitcoin block 479808 — Header and timestamp via mempool.spaceFuente primaria DOC · 017Bitcoin block 481824 — Header and timestamp via mempool.spaceFuente primaria DOC · 018BIP 1 — Purpose and GuidelinesFuente primaria DOC · 019BIP 113 — Median time-pastFuente primaria
Revisado: Fuentes primero · No es asesoramiento financiero