Witness é um campo de itens de pilha para cada entrada. Seu significado depende da versão e condição da saída gasta; não é automaticamente um script executável isoladamente.
Cada entrada tem sua lista de itens na serialização witness. A verificação da assinatura usa uma mensagem definida pela versão do script; a simples presença dos dados não prova validade. [BIP 141 — Segregated Witness] [BIP 143 — SegWit signature hashing]
txid é calculado com a serialização original sem witness. wtxid inclui a serialização completa com witness; numa transação sem witness os identificadores são iguais. [BIP 141 — Segregated Witness]
Witness program é uma condição com versão na saída gasta. Witness é fornecido pela transação posterior que a gasta; não é o mesmo campo nem uma cópia do conjunto UTXO. [BIP 141 — Segregated Witness]
SegWit nativo versão 0 exige scriptSig vazio. Na forma encapsulada em P2SH, scriptSig coloca witness program na pilha; as provas de gasto permanecem no witness. [BIP 141 — Segregated Witness]
P2WPKH fornece assinatura e chave pública. Em P2WSH o último item é witnessScript, cujo hash deve corresponder ao programa; os itens anteriores formam a pilha inicial. [BIP 141 — Segregated Witness] [BIP 143 — SegWit signature hashing]
Após remover annex, se presente, Taproot distingue um único item de assinatura para o caminho de chave e um caminho de script com script e bloco de controle. Regras da versão 0 não se transferem mecanicamente para a versão 1. [BIP 341 — Taproot]
BIP 141 compromete witness por uma árvore wtxid e um compromisso na coinbase. Coinbase usa wtxid zero nessa árvore; o compromisso combina a raiz com um valor reservado de 32 bytes. [BIP 141 — Segregated Witness]
Alterar apenas witness não muda txid. A separação não garante imutabilidade de todos os outros campos ou combinações de entradas; a prova alterada ainda deve passar pela validação. [BIP 141 — Segregated Witness] [Bitcoin Core — Segregated Witness benefits]
Bytes acrescentados pela serialização witness contribuem 1 WU contra 4 WU do byte base. Um Full Node ainda precisa deles para a validação aplicável; não são dados gratuitos fora da cadeia. [BIP 141 — Segregated Witness] [Bitcoin Core v29.0 — Script interpreter]
Witness pode revelar publicamente assinatura, chave pública ou o ramo de script usado. Não é armazenamento criptografado, não se destina a guardar chaves privadas e não substitui Seed Phrase nem cópias da carteira. [BIP 341 — Taproot] [Bitcoin Developer Reference — Transactions]
Para ter uma visão mais completa, leia este verbete junto com SegWit, Block weight, Bitcoin Script, Taproot. Também há referências a este verbete em Virtual byte (vbyte), Block weight.