Pular para o conteúdo
buybitcoinsmart

Glossário / Nós e software

Inventário

Outros nomes: Mensagem inv.

O que é um inventário?
Um inventário é a lista de identificadores de objetos que um nó anuncia aos seus pares, dizendo quais transações e blocos ele tem sem enviar nenhum deles ainda.

Anuncie primeiro, entregue quando solicitado. Esse padrão é o motivo pelo qual a rede não se afoga em duplicatas: cada entrada custa 36 bytes, uma etiqueta de tipo de quatro bytes mais um hash de 32 bytes, e uma única mensagem inv pode carregar até 50.000 delas. Um par que já tem o objeto nunca pede, e a largura de banda nunca é gasta.

Como funciona

Uma entrada de inventário é um par: um número que diz que tipo de coisa é, e o hash que a identifica.

Os códigos de tipo são inteiros pequenos. 1 é uma transação, 2 é um bloco, 3 é um bloco filtrado do antigo esquema de filtros Bloom, 4 é um bloco compacto, 5 é uma transação identificada por seu hash de testemunha. Definir o bit 0x40000000 sobre um tipo marca a variante com testemunha, então um par compatível com SegWit solicita MSG_WITNESS_BLOCK onde um mais antigo teria pedido um bloco simples.

A troca ocorre em três etapas. Um nó envia inv listando o que é novo. O par examina a lista, ignora tudo o que reconhece e responde com getdata nomeando apenas o que lhe falta. O nó envia esses objetos, uma mensagem para cada um, ou notfound quando algo foi descartado nesse meio-tempo. A aritmética por trás do limite de 50.000 vale a pena notar: 50.000 entradas a 36 bytes são 1.800.000 bytes, confortavelmente dentro do teto de 4.000.000 bytes em uma única mensagem, e Bitcoin Core inclui uma asserção em tempo de compilação que mantém essas duas constantes coerentes entre si.

O momento do anúncio é um controle de privacidade, não um detalhe de implementação. Bitcoin Core não anuncia uma transação no instante em que fica sabendo dela. Os anúncios são agrupados em lotes e liberados em um temporizador aleatório que em média leva dois segundos para pares de saída e cinco para pares de entrada, de modo que um observador conectado a muitos nós não pode usar a ordem de chegada para descobrir onde um pagamento começou. Os blocos pulam o atraso por completo, porque não há nada a esconder e segundos custam dinheiro.

Gritar cada hash para cada par é caro, e Erlay é a cura proposta: os pares reconciliam periodicamente esboços curtos do que cada um tem, em vez de inundar todas as direções com identificadores.

Onde você vê isso

Os inventários são a coisa mais barulhenta na interface de rede de um nó e a mais fácil de observar.

A chamada getpeerinfo divide o tráfego por tipo de mensagem, e inv quase sempre está entre os maiores contadores. Um nó bem conectado gasta uma parte real de sua largura de banda anunciando hashes que ninguém acabou precisando. É também por isso que um pagamento aparece em um explorador de blocos segundos antes de outro: são observadores separados que ouvem anúncios separados de partes diferentes da rede.

Um hábito que vale a pena desaprender: um inv não é um compromisso. Um nó pode anunciar uma transação e então descartá-la minutos depois, quando sua mempool se enche, e não deve a ninguém uma correção.

Inventário vs mempool

Um inventário é uma mensagem; uma mempool é um armazenamento, e só um deles sobrevive ao momento. O inv diz a um par que um hash existe em algum lugar. A mempool é o conjunto de transações não confirmadas que um nó realmente validou, mantém na memória e está disposto a encaminhar ou minerar, com tamanho padrão de 300 MB e uma política de expulsão que descarta as mais baratas primeiro. Ver seu txid se propagar por anúncios inv diz que a rede ouviu falar do seu pagamento. Não diz que alguém ainda o tem uma hora depois.

Não confundir com

Perguntas frequentes

O fato de minha transação aparecer em um anúncio inv significa que ela será confirmada?

Não. Um inv diz que um nó ouviu falar da transação, nada mais. Esse nó pode descartá-la minutos depois, quando sua mempool se encher, e nenhum minerador é obrigado a incluí-la, então a confirmação é a única coisa que resolve a questão.

Por que há um atraso antes de meu nó anunciar uma transação?

Por privacidade. O Bitcoin Core agrupa os anúncios de transações em um temporizador aleatório que em média leva dois segundos para pares de saída e cinco para pares de entrada, de modo que um observador conectado a muitos nós não pode usar a ordem de chegada para identificar onde um pagamento se originou.

Termos relacionados

Mais em Nós e software

Ler esta página em inglês