Um Portão para Blocos-Excessivos: Como o Nodo da Bitcoin Unlimited lida com “Grandes” Blocos

A camada de consenso da Bitcoin Unlimited está preocupada em preservar a propriedade monetária do Bitcoin. Os blocos que são potencialmente problemáticos de serem aceitos, por razões técnicas, são lidados em uma camada diferente onde o consenso da rede não é crítico. Este artigo descreve como a lógica para lidar com blocos-excessivos da Bitcoin Unlimited funciona sob a perspectiva de um nodo único. Um artigo futuro irá descrever como este comportamento de “escala de nodos” facilita a emergência de um limite de tamanho de bloco fluido e orgânico em escala de rede.

Bitcoin é dinheiro. Se você concorda com isso, então você também provavelmente concorda que Alice não deve ser capaz de criar bitcoins a partir do nada, que Bob não deve ser capaz de gastar o mesmo bitcoin duas vezes, e que Carol não dever capaz de gastar livremente os bitcoins que pertencem à Alice ou ao Bob.

Estas propriedades — que nós todos intuitivamente reconhecemos como as que um bom dinheiro deve ter — são reforçadas por cada nodo na rede Bitcoin. Como descrito por Satoshi Nakamoto:

Fig. 1. Trecho do Satoshi White Paper. Um bloco é aceito se preserva a propriedade monetária do Bitcoin.

A aplicação destas regras ocorre em cada camada de consenso de cada nodo. Nós a chamamos de camada de consenso em parte porque há um difundido consenso humano sobre o que estas regras são: elas são simplesmente as regras necessárias para fazer o bitcoin funcionar como dinheiro.

Fig. 2. De acordo com Satoshi white paper, um nodo aceita um bloco se todas as transações são válidas e não há gasto duplo — portanto preservando a propriedade monetária do Bitcoin.

Fig. 2 exibe o processo de escaneamento de um nodo de cada transação em um novo bloco. Se todas as transações forem válidas e ainda não gastas, então a propriedade monetária do Bitcoin está preservada. Este bloco mais recente torna-se a “ponta da corrente”, representando a versão mais atualizada do livro-razão do Bitcoin. Os nodos de mineração começam a procurar por um novo bloco que seja construída no topo desta ponta da corrente. Quando um minerador encontra um, o mesmo processo se repete, e a blockchain do Bitcoin é estendida uma vez mais.

Até aqui tudo bem. Todos concordam e entendem quais são as regras.

Mas e se tiver um motivo técnico de que pode ser uma má ideia aceitar um bloco particular (mesmo se o bloco ainda preserve a propriedade monetária do Bitcoin)? Lembre-se, a rede Bitcoin é feita de hardware computacional conectado através de canais de comunicação físicos, e sujeitos a limitações físicas. Um bloco pode conter tantas transações que um minerador pode ficar preocupado que ele nunca alcance os mineradores do outro lado da Great Firewall of China, ou um operador do nodo pode estar preocupado que ele irá usar muito espaço de seu hard-drive para armazenar ou muito do processamento de seu nodo para validá-lo.

A Bitcoin Core dá respostas preto-no-branco para a complicada questão de que tipo de blocos pode ser uma má ideia aceitar. A Bitcoin Core diz que se o bloco é maior do que 1 MB então ele deve ser rejeitado (da mesma forma que um bloco é rejeitado se contém um duplo-gasto). Esta regra existe, portanto, na camada de consenso do Core. Funciona bem se todos os outros nodos dão a mesma resposta preto-no-branco para esta complicada questão (Fig. 3a), mas se uma fração suficiente da rede descordar (ex, porque os blocos estão cheios) e pensam que também é uma boa ideia aceitar blocos de tamanho 1.5 MB (lembre-se que 1 MB era apenas um palpite feito 6 anos atrás), então os Core nodos irão “bifurcar para fora da rede” (Fig. 3b). Usuários Core não verão mais suas transações confirmadas (ou confirmadas de modo muito devagar) e mineradores usando Core irão desperdiçar seu poder de hash tentando estender o bloco errado. Este é um resultado negativo que pode ser evitado.

Fig. 3. Uma vez que o limite de tamanho do bloco faz parte da camada de consenso do Core nodo, os Corde nodos irão ser bifurcados para fora da rede Bitcoin se a rede começar a permitir blocos maiores que 1 MB.

Antes de descrevermos como um nodo da Bitcoin Unlimited lida com o mesmo problema, observe que a regra de tamanho de bloco do Core não é como as outras duas regras que analisamos (ou seja, aquelas que exigem que todas as transações de um bloco sejam válidas e não tenham duplo-gasto). Em vez de impor a propriedade monetária do Bitcoin, essa regra adicional é um hack que trata de uma limitação tecnológica temporária da rede física do Bitcoin. Na verdade, é uma restrição técnica relacionada ao transporte de blocos pela rede que entrou na camada de consenso do Core.

Na Bitcoin Unlimited, a camada de consenso está apenas preocupada com a preservação da propriedade monetária do Bitcoin. Um nodo da Bitcoin Unlimited lida com a questão de quais blocos podem ser difíceis de aceitar por razões técnicas fora da camada de consenso e de uma maneira imprecisa: faz uma suposição e muda de ideia se sua suposição estava errada!

Fig. 4. Diagram of a Bitcoin Unlimited node’s excessive-block gate. The width of the opening represents the node’s block size limit. Blocks smaller than this limit immediately pass through the gate to the consensus layer. Blocks larger than this are stopped by the gate. The gate only opens if a sufficient number of additional blocks are mined on top of the excessive block. How many additional blocks are required to open the gate is known as the node’s acceptance depth.

O nodo faz isso usando o que pode ser chamado de um portão de bloco-excessivo. O portão de bloco-excessivo primeiro verifica o tamanho de cada novo bloco (e outras propriedades que podem fazer o bloco ser difícil de aceitar por motivos técnicos como o número de sigops e o tamanho de qualquer grande transação [veja notas abaixo]). Se o bloco não for excessivo, ele passa diretamente através do portão para a camada de consenso do nodo. Contudo, se o bloco é excessivo, o portão segura o bloco para trás, prevenindo-o de se tornar uma nova ponta da corrente. O portão abre apenas se um número suficiente de blocos adicionais é empilhado sobre o bloco excessivo. O que constitui um bloco excessivo é definido pelo usuário (veja notas abaixo).

Se a maioria da rede concordar que o bloco em questão era excessivo, então eventualmente um novo bloco virá para deixar o bloco excessivo órfão (i.e., porque a maioria dos mineradores ainda estarão minerando sobre o bloco anterior), como animado pela Fig. 5.

Fig. 5. Um portão de bloco-excessivo do nodo da Bitcoin Unlimited para um bloco-excessivo. Uma vez que nenhum bloco é construído sobre o bloco vermelho, o portão nunca abre e o bloco fica órfão.

No entanto, se a rede discordar, então novos blocos serão construídos sobre o bloco que se pensava ser excessivo (ou seja, porque a maioria dos mineradores continuaram a corrente sobre o bloco “excessivo”). Uma vez que a pilha de blocos atingir uma determinada altura definida pela profundidade de aceitação do nodo, o portão abre, permitindo que os blocos passem para a camada de consenso e prolonguem a cadeia. (A profundidade de aceitação do nodo é configurável pelo usuário.) Ao contrário de um Core nodo, um nodo da Bitcoin Unlimited não será bifurcado para fora da rede caso a rede como um todo comece a aceitar blocos maiores.

Fig. 6. Um portão de bloco-excessivo da Bitcoin Unlimited para blocos de tamanho excessivo. Após um suficiente número de blocos serem construídos em cima dele, o portão abre e o bloco é aceito. Esta animação corresponde a uma profundidade de aceitação de 2. Note que a animação é ligeiramente enganosa: como atualmente programado, o portão permaneceria aberto até que nodo ver 144 blocos não excessivos em sequência.

Naturalmente, também é possível que ambas as cadeias estejam construídas sobre uma espécie de mistura da Fig. 5 e da Fig. 6. Ainda assim, o portão de bloco em excesso funciona da mesma forma. Assim que um bloco vermelho tiver blocos suficientes construídos em cima dele, o portão abre, apresentando o bloco vermelho e os blocos acima dele como uma ponta de corrente possível. Se for mais longa do que a ponta atual da corrente, a ponta atual da corrente é então substituída. Se não for mais longa, a ponta atual da corrente será mantida.

Uma vez que a lógica do bloco-excessivo existe fora da camada de consenso, não é fundamental que os nodos lidem com blocos excessivos da mesma maneira. Cada operador de nodo está livre para expressar sua opinião sobre o que torna um bloco “excessivo” configurando adequadamente a porta de bloco excessivo de seu nodo. Através do efeito cumulativo de milhares de operadores de nodos e mineradores expressando suas preferências desta forma, um “limite efetivo de tamanho de bloco” surge naturalmente. Este será o assunto do nosso próximo artigo.

Agradecimentos

O autor agradece a Roger Murdock, Andrea Suisani (sickpig), Andrew Stone (thezerg), HostFat e Andrew Clifford (solex) pelo seu feedback sobre os primeiros rascunhos deste artigo.

Copyright

Este documento e suas imagens foram colocados em domínio público.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.