Visão geral
O Segregated Witness (SegWit), ativado em 24 de agosto de 2017, é uma das atualizações mais significativas ao protocolo Bitcoin. Ele reestrutura como os dados das transações são organizados, movendo os dados de assinatura (testemunha) para uma estrutura separada. Essa mudança aparentemente simples resolveu vários problemas de longa data: corrigiu a maleabilidade de transações, habilitou a Lightning Network, aumentou a capacidade efetiva dos blocos e introduziu um desconto de taxa para dados de testemunha.
Como o SegWit reestrutura as transações
Transação pré-SegWit: Transação SegWit:
┌─────────────────────────┐ ┌─────────────────────────┐
│ Versão │ │ Versão │
├─────────────────────────┤ ├─────────────────────────┤
│ Entradas: │ │ Marcador + Bandeira │
│ ┌────────────────────┐ │ │ (0x0001) │
│ │ TXID anterior │ │ ├─────────────────────────┤
│ │ ScriptSig │ │ │ Entradas: │
│ │ (assinaturas AQUI)│ │ │ ┌────────────────────┐ │
│ └────────────────────┘ │ │ │ TXID anterior │ │
├─────────────────────────┤ │ │ ScriptSig (vazio) │ │
│ Saídas │ │ └────────────────────┘ │
├─────────────────────────┤ ├─────────────────────────┤
│ Locktime │ │ Saídas │
└─────────────────────────┘ ├─────────────────────────┤
│ Testemunha: │
TXID cobre toda a │ (assinaturas AQUI) │
transação incluindo ├─────────────────────────┤
as assinaturas │ Locktime │
└─────────────────────────┘
TXID cobre tudo
EXCETO os dados de testemunha
Problemas resolvidos pelo SegWit
Correção da maleabilidade de transações
Antes do SegWit, o ID de transação (TXID) era calculado sobre toda a transação, incluindo as assinaturas. Como as assinaturas podiam ser ligeiramente modificadas sem invalidá-las (maleadas), o TXID poderia mudar após a transmissão. O SegWit exclui os dados de testemunha do cálculo do TXID, tornando os TXIDs imutáveis. Isso foi um pré-requisito para a Lightning Network, que depende de cadeias de transações pré-assinadas referenciando TXIDs estáveis.
Aumento da capacidade de blocos
O SegWit introduziu o "peso do bloco" (máximo 4 milhões de unidades de peso) para substituir o antigo limite de tamanho de bloco de 1 MB. Os dados não-testemunha contam 4 unidades de peso por byte, enquanto os dados de testemunha contam 1 unidade de peso por byte. Na prática, isso permite que os blocos contenham aproximadamente 1,7-2,1 MB de dados totais, dependendo da mistura de transações.
Desconto de testemunha
O desconto de testemunha incentiva a adoção do SegWit ao contar os bytes de testemunha a um quarto do peso. Isso resulta em taxas menores para transações P2WPKH e P2TR em comparação com transações P2PKH legadas, beneficiando os usuários que atualizam.
Versões do SegWit
O SegWit introduziu um sistema de versionamento para atualizações futuras:
- Testemunha v0 — Saídas P2WPKH e P2WSH usando endereços Bech32 (
bc1q...) - Testemunha v1 — Saídas P2TR (Taproot) usando endereços Bech32m (
bc1p...) - Testemunha v2-16 — Reservado para futuras atualizações, implantáveis via soft fork
Compatibilidade retroativa
O SegWit foi implantado como um soft fork, o que significa que nós não atualizados ainda aceitam blocos SegWit como válidos (eles veem as saídas de testemunha como "qualquer um pode gastar" mas nunca tentam gastá-las). Essa compatibilidade retroativa evitou uma divisão de cadeia controversa e permitiu adoção gradual.
Equívoco comum
O SegWit às vezes é descrito simplesmente como um "aumento do tamanho de bloco," mas isso subestima sua importância. A correção de maleabilidade foi possivelmente mais importante, pois habilitou todo um ecossistema de protocolos de camada 2. O aumento de capacidade foi um efeito colateral bem-vindo do novo sistema de contabilidade baseado em peso.