wTXID
Como um TXID, mas incluindo os dados de testemunha
Um wTXID é como um TXID, mas inclui os dados de testemunha de uma transação.
- Um wTXID é o HASH256 de todos os dados da transação, incluindo o marker, flag e witness.
- Um TXID é o HASH256 de todos os dados da transação exceto o marker, flag e witness.
Exemplos
Como você cria um wTXID?
Transação SegWit
Para uma transação segwit, o TXID é o HASH256 dos dados exceto marker/flag/witness, e o wTXID é o HASH256 de todos os dados incluindo esses campos. Os dois são diferentes.
Ordem de Bytes. Não esqueça que TXIDs e wTXIDs são exibidos em ordem invertida, então o resultado inicial do HASH256 estará em ordem natural (parece "ao contrário" no início).
Transação Legada
Uma transação não-segwit tem o mesmo TXID e wTXID, já que não contém marker, flag nem witness.
Você pode encontrar o wTXID de uma transação rodando bitcoin-cli getrawtransaction <txid> 1. O wTXID será igual ao campo "hash".
Compromisso de wTXID
Comprometendo os dados de testemunha ao bloco
Os wTXIDs são usados para comprometer os novos dados das transações segwit ao bloco, por meio de uma raiz da testemunha (witness root hash).
Todos os dados das transações legadas são comprometidos ao cabeçalho do bloco por meio de uma raiz de Merkle de todos os TXIDs do bloco. Porém, os TXIDs não incluem os dados de marker, flag e witness. Então, para todos os blocos desde a atualização SegWit, também criamos uma raiz de Merkle de todos os wTXIDs e a comprometemos ao bloco.
Essa raiz da testemunha passa pelo HASH256 junto com o valor reservado da testemunha para criar um compromisso de wTXID, que é colocado dentro do ScriptPubKey de uma das saídas da transação coinbase. Assim, se alguém tentar alterar o conteúdo da testemunha de qualquer transação do bloco, ela não vai mais bater com o compromisso, e o bloco será inválido.
Os wTXIDs servem, em última análise, para impedir que alguém edite os novos dados de testemunha (segwit) incluídos no bloco.
A raiz da testemunha usa o wTXID da coinbase como todo zeros, para evitar uma referência circular.