Memory Pool
A área de espera de novas transações
O memory pool (mempool) é uma área de espera para novas transações.
Novas transações ficam armazenadas no memory pool de um nó enquanto esperam para serem mineradas na blockchain.
Não confie em transações do memory pool. Nem todas as transações vão do memory pool (armazenamento temporário) para a blockchain (armazenamento permanente).
Propósito
Por que o memory pool existe?
O memory pool é usado para resolver transações conflitantes.
É possível que duas transações diferentes gastando os mesmos bitcoins sejam inseridas em partes diferentes da rede ao mesmo tempo. Alguns nós recebem uma transação primeiro, e outros recebem a outra primeiro. Como ambas tentam gastar os mesmos bitcoins, apenas uma deve ser gravada na blockchain.
Esse conflito é resolvido quando um dos nós da rede minera as transações do seu memory pool em um bloco. Ao receberem esse bloco recém-minerado, os nós o adicionam à blockchain e expulsam quaisquer transações conflitantes do seu memory pool.
O memory pool tem um papel crucial em impedir que transações conflitantes sejam gravadas na blockchain, e é a razão pela qual você precisa esperar as transações serem mineradas.
Entrada
Como uma transação entra no memory pool?
Uma transação pode entrar no memory pool de um nó de algumas formas:
- Inserida em um nó local. Uma nova transação pode ser inserida diretamente em um nó (ex.: via
bitcoin-cli sendrawtransaction, ou pela sua carteira), que então a transmite aos outros nós. - Recebida de outro nó. Os nós transmitem continuamente as transações mais recentes que receberam. Se um nó anuncia uma transação que o seu não tem, o seu a solicita e a adiciona.
- Reentrada após uma reorganização da cadeia. Transações antes mineradas podem voltar ao memory pool durante uma reorganização, se não estiverem nos blocos da nova cadeia mais longa.
Só transações válidas podem entrar no memory pool. Um nó verifica se cada transação que recebe é válida (não quebra regras) antes de adicioná-la ou retransmiti-la.
Saída
Como uma transação sai do memory pool?
- Minerada. É o objetivo de toda transação do memory pool. Quando um minerador minera um bloco, os nós movem as transações desse bloco do memory pool para a blockchain (de armazenamento temporário para permanente).
- Conflito minerado. Os nós removem do memory pool qualquer transação que conflite com as transações dentro de um bloco minerado.
- Substituída. Uma transação é removida se for substituída por uma nova transação de taxa mais alta (via replace-by-fee, RBF) que gasta os mesmos bitcoins.
- Limite de tempo. Se uma transação não for minerada antes do limite de tempo (padrão: 2 semanas), o nó a remove.
- Limite de tamanho. Quando o memory pool atinge um tamanho máximo (padrão: 300 MB), o nó começa a remover as transações de menor taxa para abrir espaço para as de taxa mais alta.
Configurações
Cada nó mantém o seu próprio memory pool e pode usar suas próprias regras. As configurações mais comuns do bitcoin.conf são:
maxmempool=<n>
padrão = 300 MB
Controla o tamanho máximo do memory pool em MB. Aumentá-lo é a forma mais fácil de acompanhar o máximo de transações possível, mas usa mais RAM.
mempoolexpiry=<n>
padrão = 336 horas (2 semanas)
Controla por quantas horas seu nó mantém as transações no memory pool.
minrelaytxfee=<valor>
padrão = 0.00001 BTC/kvB (1 sat/vbyte)
Controla a taxa mínima por byte para uma transação ser adicionada ao mempool do seu nó. O padrão de 0,00001 BTC/kvB equivale a 1 sat/vbyte.
Conversor de Unidades
Então, embora cada memory pool possa ser único, as configurações mais comuns na rede são: tamanho máximo de 300 MB, manter transações por até 2 semanas e rejeitar transações com taxa abaixo de 1 sat/byte. Como resultado, a maioria dos nós compartilha uma visão parecida do memory pool a qualquer momento.
Localização
Onde o memory pool é armazenado?
O memory pool fica na RAM do seu computador enquanto o nó está rodando. Quando você desliga o Bitcoin Core, ele salva o memory pool em um arquivo mempool.dat para recarregá-lo na próxima vez que iniciar.
Comandos
Alguns comandos úteis do Bitcoin Core para inspecionar o memory pool:
bitcoin-cli getmempoolinfo– informações gerais (tamanho, número de transações, taxa mínima).bitcoin-cli getrawmempool– lista os TXIDs de todas as transações no memory pool.bitcoin-cli getmempoolentry [txid]– detalhes de uma transação específica no memory pool.