Glossário / Protocolo e atualizações
Cluster mempool
- O que é o cluster mempool?
- Cluster mempool é o redesenho da sala de espera do Bitcoin Core que mantém cada grupo de transações não confirmadas conectadas entre si ordenado, de modo que o nó sempre sabe quais um minerador realmente escolheria.
Transações não confirmadas que gastam umas às outras formam um grafo de dependências, e durante anos o software só podia raciocinar sobre ele por meio de limites grosseiros de quantos ancestrais e descendentes cada entrada podia ter. A versão 31.0 substituiu esses limites por uma única regra: nenhum grupo conectado com mais de 64 transações ou 101 kB de tamanho virtual. O aumento de taxa e a substituição se tornaram mais previsíveis como resultado.
Como funciona
Um cluster é um componente conectado da mempool. Pegue qualquer transação não confirmada, siga cada vínculo de pai e de filho nos dois sentidos, e tudo o que você alcançar pertence ao mesmo cluster.
O projeto antigo rastreava ancestrais e descendentes separadamente e limitava cada um a 25, com um teto de tamanho ao lado. Isso era barato de calcular e errado em um aspecto importante. Dizia a um nó qual era o tamanho de uma família sem dizer em que ordem um minerador racional pegaria essa família, então a mempool não conseguia responder à sua própria pergunta central: se eu tivesse que montar um bloco agora mesmo, o que entraria nele?
O cluster mempool responde a isso mantendo cada cluster linearizado o tempo todo. Uma linearização é uma ordenação dividida em chunks, cada chunk sendo um conjunto de transações que seriam mineradas juntas e que compartilham uma mesma taxa efetiva. Ordenar esses chunks produz um diagrama de taxas para toda a mempool, e é contra esse diagrama que as decisões agora são medidas.
Os limites são 64 transações e 101 kB de tamanho virtual por cluster, e substituíram por completo as contagens de ancestrais e descendentes. A exceção CPFP carveout, que antes permitia que uma transação filha adicional passasse do limite de descendentes, foi excluída junto com os limites, porque nada pode contornar a contagem do cluster.
O ganho aparece na substituição. As regras antigas de substituição por taxa eram um punhado de condições emendadas umas nas outras, e podiam ser burladas anexando lixo barato a uma transação compartilhada até que substituí-la se tornasse absurdamente caro. Comparar diagramas de taxas oferece um único teste: uma substituição é aceita quando não deixa o diagrama pior em nenhum ponto e melhor em algum. Dois novos RPCs expõem o mecanismo, getmempoolcluster para o conteúdo e a ordenação de um cluster e getmempoolfeeratediagram para o próprio diagrama.
Onde você vê isso
O cluster mempool aparece como uma mensagem de erro quando você encadeia gastos não confirmados demais, e como um aumento de taxa que dá certo onde você esperava problema.
Os usuários de carteiras encontram o limite em uma situação comum: gastar o troco não confirmado repetidas vezes durante um período movimentado. Sessenta e quatro transações é generoso para uma pessoa e apertado para um serviço que agrupa pagamentos em lote, que é mais ou menos para quem o número foi escrito. Quando uma carteira recusa um gasto e menciona um cluster, a solução é esperar uma confirmação em vez de aumentar a taxa.
O benefício mais discreto é que o child-pays-for-parent agora faz o que promete. Aumente a taxa de uma transação presa gastando sua saída a uma taxa alta e o nó consegue ver imediatamente se o par supera o que já está na fila, então você obtém uma resposta direta em um passo em vez de uma aproximação.
Cluster mempool vs mempool
A mempool é o conjunto de transações que um nó mantém; o cluster mempool é como um programa organiza esse conjunto internamente. Nenhuma regra de consenso mudou, nenhum fork aconteceu, e um nó que ainda executa uma versão anterior mantém as mesmas transações com uma contabilidade pior. A distinção importa porque a mudança às vezes é noticiada como se o bitcoin tivesse ganhado uma nova regra de rede sobre cadeias de transações. Ele não ganhou. Isso é política, escolhida nó por nó, e qualquer operador pode mover os limites na própria máquina com um argumento de linha de comando.