Skip to main content

Testemunha | Bitcoin Glossary | Mapping Bitcoin

Testemunha

Protocolo

Also known as: witness data, segregated witness data

Dados de assinatura segregados do corpo da transação SegWit que provam autorização para gastar UTXOs e são descontados no cálculo de peso do bloco.

Visão geral

No Bitcoin, a testemunha são os dados que provam autorização para gastar um UTXO — consistindo tipicamente de assinaturas digitais e chaves públicas. Com a introdução do Segregated Witness (SegWit), esses dados de autorização foram movidos ("segregados") do corpo principal da transação para uma estrutura de testemunha separada, resolvendo a maleabilidade de transações e habilitando o desconto de testemunha.

Estrutura de transação pré-SegWit vs. SegWit

Transação pré-SegWit:
┌────────────────────────────────────┐
│ Versão                             │
│ Entradas:                          │
│   TXID anterior + Índice           │
│   ScriptSig (assinatura + pubkey)  │  ← Dados de testemunha
│   Sequência                        │     dentro do corpo tx
│ Saídas:                            │
│   Valor + ScriptPubKey             │
│ Locktime                           │
└────────────────────────────────────┘
  TXID = Hash(estrutura completa acima)

Transação SegWit:
┌────────────────────────────────────┐
│ Versão                             │
│ Marcador + Bandeira (0x0001)       │
│ Entradas:                          │
│   TXID anterior + Índice           │
│   ScriptSig (vazio para nativo)    │
│   Sequência                        │
│ Saídas:                            │
│   Valor + ScriptPubKey             │
│ Testemunha:                        │
│   [assinatura, pubkey]             │  ← Separado!
│ Locktime                           │
└────────────────────────────────────┘
  TXID = Hash(estrutura SEM testemunha)

Por que a segregação importa

Ao mover os dados de testemunha para fora do cálculo do TXID:

  1. Correção da maleabilidade: Modificar os dados de testemunha não altera mais o TXID, permitindo o encadeamento confiável de transações essencial para a Lightning Network.
  2. Desconto de taxa: Os bytes de testemunha são contados a um quarto do peso (o desconto de testemunha), incentivando a adoção do SegWit e aumentando efetivamente a capacidade do bloco.
  3. Versionamento de scripts: A estrutura de testemunha inclui um byte de versão, permitindo futuras atualizações de scripts (como Tapscript) sem interromper os formatos de transação existentes.

A testemunha no Taproot

As transações Taproot usam a versão de testemunha 1. Para gastos por caminho de chave, a testemunha contém uma única assinatura Schnorr de 64 bytes. Para gastos por caminho de script, a testemunha inclui o script, uma prova Merkle da inclusão do script na árvore de scripts, e os dados que satisfazem as condições do script.

Conceitos errôneos comuns

A testemunha não é opcional para transações SegWit — é necessária para que a transação seja válida. O termo "segregado" significa que os dados de testemunha estão estruturalmente separados da parte da transação usada para calcular o TXID, não que possam ser descartados. Os nós completos armazenam e validam os dados de testemunha; eles são apenas excluídos do hash do TXID.