Segregated Witness, especificado no BIP141, ativou-se no bloco 481.824 em 24 de agosto de 2017. Foi a maior atualização da história do Bitcoin na época, e foi um soft fork.
Problema 1: malleability
Antes do SegWit, um terceiro podia mudar ligeiramente a codificação de uma assinatura sem invalidá-la. A transação continuava válida, mas o seu txid mudava. Qualquer transação não confirmada que a gastasse, ao referir-se ao txid antigo, quebraria. Isso bloqueava protocolos off-chain seguros.
O SegWit move assinaturas e scripts para uma estrutura witness separada que não faz parte do txid. Um segundo ID, o wtxid, a inclui.
Problema 2: espaço de bloco
O SegWit substituiu o limite de tamanho de 1 MB por um limite de 4.000.000 de unidade de pesos. Bytes que não são witness custam 4 WU; bytes de witness custam 1. Nós antigos só veem o bloco cortado, que fica abaixo de 1 MB, então continuam aceitando. Nós atualizados veem o bloco completo, que pode ser maior.
Como nós antigos continuam compatíveis
Uma saída SegWit parece OP_0 <20 or 32 bytes>. Nós antigos veem um script que qualquer um pode gastar com um scriptSig vazio, então aceitam qualquer gasto. Nós novos aplicam as regras do programa witness. Os blocos comprometem-se com os dados de witness via uma saída OP_RETURN na coinbase que contém um hash da raiz Merkle do witness.
Outras correções
- O BIP143 mudou como as assinaturas são hasheadas. O tempo de assinatura cresce de forma linear em vez de quadrática, e os assinantes comprometem-se com o valor da entrada, o que ajuda carteiras de hardware.
- Versionamento de script: o opcode inicial (OP_0 a OP_16) é um número de versão, o que tornou Taproot (versão 1) uma atualização limpa.
Por que importou
Sem uma correção de malleability, a Lightning Network teria sido impraticável. O SegWit ativou-se após uma longa disputa sobre o tamanho de bloco, que envolveu o BIP148 (um soft fork ativado por usuários) e a separação do Bitcoin Cash em 1 de agosto de 2017.