Pular para o conteúdo
buybitcoinsmart

Glossário / Referência do desenvolvedor

MSG_TX

O que é o MSG_TX?
O MSG_TX marca uma entrada de inventário como transação, com o código de tipo 1, e é assim que seu pagamento não confirmado é anunciado aos pares antes que qualquer um deles tenha visto seu conteúdo.

Um único número separa um pagamento de um bloco no protocolo de anúncios do bitcoin, e esse número é 1. Ele viaja junto com o identificador de 32 bytes da transação, 36 bytes no total, e não compromete o remetente a nada: os bytes só se movem quando um par responde com getdata. Desde o Bitcoin Core 0.21.0, a maioria dos pares anuncia com um código completamente diferente.

Como funciona

O MSG_TX nomeia uma transação pelo seu txid, o identificador calculado com os dados de testemunha excluídos.

Um nó que aceitou seu pagamento na mempool avisa seus pares de que o hash existe. Qualquer par que não o tenha pede, e só então o conteúdo é enviado, em uma mensagem tx. Um par que pede algo que o nó não tem mais recebe notfound, o que acontece rotineiramente: as mempools descartam transações sob pressão, e um nó não deve a ninguém uma cópia de uma transação que já descartou.

O serviço é deliberadamente relutante. O Bitcoin Core não entrega uma transação a um par para o qual nunca a anunciou até que essa transação esteja na mempool por cerca de dois minutos. Sem esse atraso, um desconhecido poderia se conectar e usar getdata para testar se seu nó conhece determinados pagamentos, o que transformaria cada nó em uma interface de consulta para sua própria mempool e tornaria muito mais fácil descobrir onde um pagamento apareceu primeiro.

O tipo 1 também carrega consigo a antiga regra de serialização. Uma transação servida em resposta a ele é escrita sem os dados de testemunha, o formato que existia antes de 2017, que, em um gasto segwit, omite as assinaturas. Por isso, os pares compatíveis com segwit solicitam a variante com testemunha e, desde que o BIP339 chegou no Bitcoin Core 0.21.0, em janeiro de 2021, costumam anunciar com o tipo 5, nomeando as transações pelo hash da testemunha, para que uma testemunha alterada não pareça mais uma transação desconhecida.

Onde você o vê

O MSG_TX é a engrenagem por trás da frase “a transação foi transmitida” e por trás das ocasiões em que se descobre que não foi.

Uma carteira conectada a um único nó entrega uma transação assinada, esse nó anuncia o hash e nada mais acontece até que algum par a solicite. Se nenhum par solicitar, o pagamento está em uma única máquina e nenhum minerador o verá. O Bitcoin Core acompanha as transações de sua própria carteira que nenhum par pediu ainda e as anuncia novamente até que um par peça. Por isso, um nó sem conexões de saída, em uma rede doméstica protegida por firewall, pode informar um pagamento como enviado sem que nada tenha saído do prédio.

O agrupamento de saques das corretoras também aparece aqui. A corretora anuncia um único hash, uma única solicitação entrega uma transação que paga dezenas de clientes de uma vez, e é por isso que o txid do seu saque contém saídas pertencentes a desconhecidos.

MSG_TX vs a mensagem P2P tx

O MSG_TX nomeia uma transação, e a mensagem tx contém uma. Confundi-los torna os registros do protocolo ilegíveis, porque as linhas inv e getdata não são nada além de códigos de tipo e hashes, enquanto os bytes reais aparecem apenas nas linhas tx. A distinção importa mais quando você está depurando a propagação. Ver seu hash sair em um inv prova que seu nó contou a alguém. Ver uma mensagem tx segui-lo prova que alguém de fato o queria.

Não confundir com

Perguntas frequentes

Como sei que minha transação realmente chegou à rede?

Anunciar o hash não basta por si só. Procure a transação em dois exploradores de blocos independentes um minuto depois de transmiti-la, pois vê-la em um nó que você não controla prova que algum par a solicitou e a aceitou.

Por que os nós modernos anunciam transações com o tipo 5?

Porque o relay do BIP339 identifica as transações pelo hash da testemunha, e não pelo txid. Isso abrange também os bytes da testemunha, então um par não confunde mais uma transação cuja testemunha foi alterada em trânsito com algo que nunca viu.

Termos relacionados

Mais em Referência do desenvolvedor

Ler esta página em inglês