Segregated Witness
La gran actualización de 2017 (SegWit)
Segregated Witness (SegWit) fue una gran actualización del software de Bitcoin, activada en 2017 (bloque 481.824).
Los principales cambios fueron una nueva estructura de transacción, un aumento del tamaño del bloque y la adición de un nuevo formato de dirección.
Esta página enumera los cambios técnicos introducidos por la actualización. Para una introducción sobre por qué y cómo ocurrió la actualización, ve la guía para principiantes sobre SegWit.
Motivación
¿Por qué se introdujo Segregated Witness?
La razón principal fue corregir la maleabilidad de las transacciones (transaction malleability).
Antes de SegWit, los TXIDs de las transacciones legadas se creaban a partir de todos los datos de la transacción, incluidas las firmas. Sin embargo, es posible ajustar las firmas de una transacción de forma que sigan siendo válidas, y eso cambiaría el TXID. Es decir, alguien podría cambiar el TXID de tu transacción después de que la enviaras a la red.
El problema es que cualquier transacción que dependiera de ese TXID (por ejemplo, una que gastara una de las salidas mientras todavía estaba en el memory pool) se volvería inválida. El cambio principal de SegWit fue modificar la estructura de la transacción para que las firmas ya no formaran parte del cálculo del TXID, haciendo que los TXIDs fueran confiables.
Estos nuevos datos de transacción permitieron, al mismo tiempo, un aumento del tamaño del bloque; por eso SegWit se introdujo como un conjunto de cambios en una sola gran actualización.
Cambios Técnicos
¿Cuáles fueron los cambios en Bitcoin?
1. Estructura de la Transacción
El cambio principal fue la adición de una nueva estructura de transacción segwit, con una nueva sección de testigo (witness) que guarda el código de desbloqueo (firmas) de los nuevos scripts. Donde las transacciones legadas usaban el campo ScriptSig, las transacciones segwit usan el testigo. Esta estructura incluye los campos marker (00) y flag (01) después de la versión.
2. Peso del Bloque
El límite de tamaño del bloque pasó de 1.000.000 de bytes a 4.000.000 de unidades de peso. Los datos de testigo reciben un "descuento" (cuentan 1 unidad de peso por byte, en lugar de 4), lo que aumentó efectivamente la capacidad del bloque a alrededor de 2–4 MB.
3. Nuevos Scripts de Bloqueo
Se añadieron los scripts P2WPKH y P2WSH (y las versiones anidadas en P2SH), que se desbloquean mediante el testigo.
4. Nuevo Formato de Dirección
Se introdujo el formato de dirección Bech32 (direcciones bc1...) para los nuevos scripts segwit.
5. wTXID y Compromiso de Testigo
Como los datos de testigo no entran en el TXID, se creó el wTXID y un compromiso de testigo en la transacción coinbase, para que los datos de testigo sigan quedando comprometidos al bloque.