Glossário / Transações e taxas
ID de transação
Outros nomes: Txid, Hash da transação, Transaction ID.
- O que é um ID de transação?
- Um ID de transação é a impressão digital hexadecimal de 64 caracteres de uma transação de bitcoin, obtida ao aplicar SHA-256 duas vezes sobre ela, e é assim que todos se referem a esse pagamento.
Ninguém atribui o identificador: ele resulta do próprio conteúdo da transação, de modo que alterar um único satoshi produz um identificador completamente diferente. O valor tem 32 bytes, é impresso como 64 caracteres hexadecimais e é exibido em ordem de bytes invertida por todos os exploradores de blocos. É a única cadeia de caracteres que permite que você e o suporte de uma corretora olhem para o mesmo pagamento.
Como funciona
Derivar um ID de transação exige dois passos e nenhum segredo. A transação é serializada em sua forma de bytes brutos, depois passa duas vezes pelo SHA-256, e os 32 bytes resultantes são o identificador. Qualquer pessoa que tenha os bytes brutos calcula o mesmo resultado, e é por isso que um identificador não pode ser reservado, solicitado ou falsificado.
A ordem de exibição é a primeira coisa que confunde as pessoas. O Bitcoin calcula os hashes internamente em um sentido e os imprime no outro, então os bytes que você vê em um explorador de blocos são o inverso dos bytes do arquivo. Nada está errado quando uma ferramenta de desenvolvedor mostra uma cadeia de caracteres que parece estar de trás para frente.
O SegWit dividiu o identificador em dois. Desde que o BIP141 foi ativado no bloco 481.824, em 24 de agosto de 2017, o ID de transação é calculado sobre a transação sem seus dados de testemunha, enquanto um segundo identificador, o wtxid, cobre tudo, inclusive as assinaturas. O motivo é a maleabilidade: antes, qualquer pessoa que retransmitisse a transação podia recodificar as assinaturas, mudando o identificador e deixando o dinheiro exatamente onde ia. A Mt. Gox culpou a maleabilidade por seus bitcoins desaparecidos em fevereiro de 2014, mas um estudo de Decker e Wattenhofer mediu os ataques reais e constatou que apenas 386 BTC podiam ser atribuídos à maleabilidade antes de a corretora suspender os saques, contra as centenas de milhares de bitcoins que ela havia perdido.
O identificador também é aquilo a que um bloco se compromete. Todos os IDs de transação de um bloco passam por hash até a raiz de Merkle guardada no cabeçalho do bloco, então um minerador não pode trocar silenciosamente um pagamento por outro depois do fato.
Por que isso importa quando você compra bitcoin
O ID de transação é a única prova que sobrevive à distância entre duas empresas. Quando um saque da Coinbase ou da Bitstamp não chegou, o chamado de suporte não avança até que você o forneça, e depois de tê-lo você não precisa mais do chamado: cole a cadeia de caracteres em qualquer explorador de blocos e você mesmo pode ver as saídas, a taxa e a contagem de confirmações. É também a forma mais rápida de saber se o atraso está na fila da corretora ou na da rede.
O caso inverso é o perigoso. Um ID de transação prova que um pagamento existe, não que ele foi enviado a você, nem que será confirmado, nem que o remetente é quem diz ser. Vendedores em mercados ponto a ponto costumam receber a captura de tela de uma página de explorador e entregar a mercadoria antes de verificar se alguma saída dessa transação paga um endereço que eles controlam. Verifique o endereço, verifique o valor e verifique as confirmações, nessa ordem.
Identificadores não confirmados também podem desaparecer. O replace-by-fee completo é a política de retransmissão padrão no Bitcoin Core moderno, então o remetente pode transmitir uma versão concorrente do mesmo pagamento, e essa versão tem um identificador diferente. O Bitcoin Core também descarta transações que mantém por mais de 336 horas, ou 14 dias. Um explorador dizendo "transaction not found" geralmente significa que uma dessas duas coisas aconteceu, não que seus bitcoins se foram.
Como ler o ID de transação do bloco gênesis
O ID de transação mais antigo do bitcoin é 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b, a única transação do bloco minerado em 3 de janeiro de 2009. Como esse bloco contém uma transação e nada mais, a raiz de Merkle do bloco é a mesma cadeia de caracteres, o que é a ilustração mais clara de como funciona o compromisso.
Essa transação paga 50 BTC a uma chave pública, e o Bitcoin Core nunca adicionou a saída ao seu conjunto de UTXOs, então o identificador nomeia dinheiro que nunca poderá se mover. Ela também carrega a manchete de jornal "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" dentro de seu campo coinbase.
A dependência corre em um só sentido. Mude uma única letra dessa manchete e tanto o ID de transação quanto a raiz de Merkle se tornam irreconhecíveis, e é por isso que um identificador é uma impressão digital e não um rótulo. Você não pode escolher um, e não pode editar uma transação sem produzir um novo.
ID de transação vs endereço de bitcoin
Um endereço é um destino e um ID de transação é o registro de um evento. Endereços podem ser entregues com antecedência e reutilizados; identificadores só existem depois que uma transação foi construída. Enviar bitcoins para um ID de transação é impossível, e as carteiras rejeitam a tentativa porque a cadeia de caracteres não passa na validação do checksum do endereço. Falsos agentes de suporte exploram a confusão pedindo “seu ID de transação” e depois fornecendo um endereço próprio.
ID de transação vs outpoint
Um ID de transação nomeia uma transação inteira, que pode pagar 300 pessoas diferentes em um único lote de uma corretora. Um outpoint nomeia uma saída dentro dela, escrito como o identificador, dois pontos e o índice da saída. As telas de controle de moedas, as confirmações de carteiras de hardware e os arquivos PSBT funcionam todos com outpoints, então um identificador sozinho não basta para dizer de qual UTXO você está falando.