Segregated Witness, especificado en BIP141, se activó en el bloque 481.824 el 24 de agosto de 2017. Fue la mayor actualización de la historia de Bitcoin en ese momento, y fue un soft fork.
Problema 1: malleability
Antes de SegWit, un tercero podía cambiar ligeramente la codificación de una firma sin invalidarla. La transacción seguía válida pero su txid cambiaba. Cualquier transacción no confirmada que la gastara, al referirse al txid antiguo, se rompería. Eso bloqueaba protocolos off-chain seguros.
SegWit mueve firmas y scripts a una estructura witness separada que no forma parte del txid. Un segundo ID, el wtxid, la incluye.
Problema 2: espacio de bloque
SegWit sustituyó el límite de tamaño de 1 MB por un límite de 4.000.000 de unidades de peso. Los bytes no witness cuestan 4 WU, los bytes witness cuestan 1. Los nodos antiguos solo ven el bloque recortado, que se mantiene bajo 1 MB, así que lo siguen aceptando. Los nodos actualizados ven el bloque completo, que puede ser mayor.
Cómo los nodos antiguos siguen compatibles
Una salida SegWit se ve como OP_0 <20 or 32 bytes>. Los nodos antiguos ven un script que cualquiera puede gastar con un scriptSig vacío, así que aceptan cualquier gasto. Los nodos nuevos aplican las reglas del programa witness. Los bloques se comprometen con los datos witness mediante una salida OP_RETURN en la coinbase que contiene un hash de la raíz Merkle del witness.
Otras correcciones
- BIP143 cambió cómo se hashean las firmas. El tiempo de firma crece de forma lineal en vez de cuadrática, y los firmantes se comprometen con el importe de la entrada, lo que ayuda a las billeteras de hardware.
- Versionado de script: el opcode inicial (OP_0 a OP_16) es un número de versión, lo que hizo de Taproot (versión 1) una actualización limpia.
Por qué importó
Sin una corrección de malleability, la Lightning Network habría sido impráctica. SegWit se activó tras una larga disputa sobre el tamaño de bloque, que involucró BIP148 (un soft fork activado por usuarios) y la separación de Bitcoin Cash el 1 de agosto de 2017.