Skip to main content

Sighash | Bitcoin Glossary | Mapping Bitcoin

Sighash

Protocolo

Also known as: signature hash type, SIGHASH flag

Bandeira que define quais partes de transação são cobertas pela assinatura Bitcoin. Tipos ALL, NONE e SINGLE habilitam casos avançados no Bitcoin Script.

Visão geral

Uma bandeira sighash (hash de assinatura) é um byte anexado a cada assinatura em uma transação Bitcoin que especifica quais partes da transação a assinatura cobre. Ao variar a bandeira sighash, os signatários podem escolher bloquear toda a transação ou deixar certas partes modificáveis por outros. Essa flexibilidade habilita padrões avançados de transação como crowdfunding, pagamentos abertos e construção colaborativa de transações.

Tipos de Sighash

Bandeiras Sighash e o que cobrem:

SIGHASH_ALL (0x01) — Padrão, mais comum
┌────────────────────────────────┐
│ Assina: TODAS entradas + TODAS │
│ saídas                         │
│ Nada pode ser alterado         │
│ "Concordo com exatamente essa  │
│  tx"                           │
└────────────────────────────────┘

SIGHASH_NONE (0x02)
┌────────────────────────────────┐
│ Assina: TODAS entradas, NENHUMA│
│ saída                          │
│ Qualquer um pode mudar para    │
│ onde os fundos vão             │
│ "Autorizo gastar minha entrada,│
│  não me importo com o destino" │
└────────────────────────────────┘

SIGHASH_SINGLE (0x03)
┌────────────────────────────────┐
│ Assina: TODAS entradas + UMA   │
│ saída (mesmo índice que a      │
│ entrada)                       │
│ Outras saídas podem ser        │
│ adicionadas                    │
│ "Quero minha saída específica, │
│  o resto é flexível"           │
└────────────────────────────────┘

Modificador ANYONECANPAY (0x80) — Pode combinar com os acima:
┌────────────────────────────────┐
│ Assina: APENAS a entrada do    │
│ signatário                     │
│ Outras entradas podem ser      │
│ adicionadas                    │
│ "Outros podem contribuir com   │
│  entradas"                     │
└────────────────────────────────┘

Bandeiras combinadas

O modificador ANYONECANPAY pode ser combinado com qualquer um dos três tipos base:

BandeiraHexEntradas assinadasSaídas assinadas
ALL0x01TodasTodas
NONE0x02TodasNenhuma
SINGLE0x03TodasUma (índice correspondente)
ALL|ANYONECANPAY0x81Uma (própria)Todas
NONE|ANYONECANPAY0x82Uma (própria)Nenhuma
SINGLE|ANYONECANPAY0x83Uma (própria)Uma (índice correspondente)

Casos de uso práticos

  • SIGHASH_ALL — Pagamentos padrão onde o signatário quer bloquear toda a transação. Usado na grande maioria das transações Bitcoin.
  • ALL|ANYONECANPAY — Crowdfunding: o criador define a saída (destinatário e valor), e múltiplos doadores cada um assina sua própria entrada. Uma vez que entradas suficientes são coletadas, a transação é válida.
  • SINGLE|ANYONECANPAY — Cada signatário se compromete com seu par entrada-saída, permitindo a um grupo construir colaborativamente uma transação. Útil em certas construções de CoinJoin.
  • NONE — Raramente usado, pois permite a qualquer um redirecionar os fundos. Poderia teoricamente ser usado em protocolos onde o destino de saída é determinado mais tarde.

Mudanças de Sighash no Taproot

A atualização Taproot introduziu SIGHASH_DEFAULT (0x00), que se comporta como SIGHASH_ALL mas economiza um byte ao não anexar a bandeira à assinatura. O Taproot também adicionou a proposta SIGHASH_ANYPREVOUT (BIP118, ainda não ativada) que permitiria assinaturas que não se comprometem com o UTXO de entrada específico, habilitando designs de canal Eltoo/LN-Symmetry.

Equívoco comum

Muitos usuários assumem que todas as assinaturas funcionam da mesma forma no Bitcoin. Na realidade, a bandeira sighash dá ao signatário controle refinado sobre o que está autorizando. No entanto, usar tipos de sighash não padrão requer uma compreensão cuidadosa, pois o uso incorreto pode resultar em fundos redirecionáveis por terceiros.