SegWit (BIP141)

Correção de malleability, dados de witness e peso de bloco.

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.