Segregated Witness

A grande atualização de 2017 (SegWit)

Segregated Witness (SegWit) foi uma grande atualização do software do Bitcoin, ativada em 2017 (bloco 481.824).

As principais mudanças foram uma nova estrutura de transação, um aumento do tamanho do bloco e a adição de um novo formato de endereço.

Esta página lista as mudanças técnicas introduzidas pela atualização. Para uma introdução sobre por que e como a atualização aconteceu, veja o guia para iniciantes sobre SegWit.

Motivação

Por que o Segregated Witness foi introduzido?

A razão principal foi corrigir a maleabilidade das transações (transaction malleability).

Antes do SegWit, os TXIDs das transações legadas eram criados a partir de todos os dados da transação, incluindo as assinaturas. Porém, é possível ajustar as assinaturas de uma transação de forma que elas continuem válidas — e isso mudaria o TXID. Ou seja, alguém poderia mudar o TXID da sua transação depois que você a enviasse à rede.

O problema é que qualquer transação que dependesse desse TXID (ex.: que gastasse uma das saídas enquanto ela ainda estava no memory pool) se tornaria inválida. A mudança principal do SegWit foi modificar a estrutura da transação para que as assinaturas não fizessem mais parte do cálculo do TXID, tornando os TXIDs confiáveis.

Esses novos dados de transação permitiram, ao mesmo tempo, um aumento do tamanho do bloco — por isso o SegWit foi introduzido como um conjunto de mudanças em uma única grande atualização.

Mudanças Técnicas

Quais foram as mudanças no Bitcoin?

1. Estrutura da Transação

A mudança principal foi a adição de uma nova estrutura de transação segwit, com uma nova seção de testemunha (witness) que guarda o código de destravamento (assinaturas) dos novos scripts. Onde as transações legadas usavam o campo ScriptSig, as transações segwit usam a testemunha. Essa estrutura inclui os campos marker (00) e flag (01) após a versão.

2. Peso do Bloco

O limite de tamanho do bloco passou de 1.000.000 de bytes para 4.000.000 de unidades de peso. Os dados de testemunha recebem um "desconto" (contam 1 unidade de peso por byte, em vez de 4), o que efetivamente aumentou a capacidade do bloco para cerca de 2–4 MB.

3. Novos Scripts de Travamento

Foram adicionados os scripts P2WPKH e P2WSH (e as versões aninhadas em P2SH), que são destravados pela testemunha.

4. Novo Formato de Endereço

Foi introduzido o formato de endereço Bech32 (endereços bc1...) para os novos scripts segwit.

5. wTXID e Compromisso de Testemunha

Como os dados de testemunha não entram no TXID, foi criado o wTXID e um compromisso de testemunha na transação coinbase, para que os dados de testemunha ainda fiquem comprometidos ao bloco.