sexta-feira, 8 de dezembro de 2017

Montando e Selecionando Cadeias de Blocos

Cadeias de Blocos Bitcoin

O passo final no mecanismo de consenso descentralizado do bitcoin é a união dos blocos em cadeias e a seleção da cadeia que possui a maior prova de trabalho. 

Assim que o nodo validar um bloco novo, ele irá tentar montar uma cadeia ligando o bloco à blockchain existente. Os nodos mantém três conjuntos de blocos: aqueles conectados à blockchain principal, aqueles que foram ramificações da blockchain principal (correntes secundárias), e, finalmente, os blocos que não tem um pai conhecido nas correntes conhecidas (órfãos). 


Os blocos inválidos são rejeitados assim que qualquer critério de validação falhar e, portanto, não são incluídos em nenhuma corrente. A "corrente principal" a qualquer momento é a corrente de blocos que tiver a maior dificuldade acumulada associada a ela. 

CORRENTE PRINCIPAL


Sob a maioria das circunstâncias ela também será a corrente que tiver o maior número de blocos, a menos que existam outras duas correntes de comprimento semelhante e uma delas tiver mais prova de trabalho. A corrente principal também terá ramificações com blocos que são "irmãos" dos blocos que estão na corrente principal. 

Eles são mantidos para referência futura, caso uma dessas correntes for estendida e passar a apresentar maior dificuldade que a corrente principal. Na próxima seção (Forks (bifurcações) da Blockchain), nós iremos ver como as correntes secundárias surgem quando há uma mineração quase simultânea de blocos em uma mesma altura. 

Quando um bloco novo é recebido, um nodo irá tentar acrescentá-lo na blockchain existente. O nodo irá procurar no bloco pelo campo "hash do bloco anterior", que é a referÊncia ao pai do bloco novo. Então, o nodo irá tentar encontrar esse pai na blockchain existente. 

Na maioria das vezes, o pai será o "topo" da corrente principal, ou seja, esse bloco novo irá estender a corrente principal. Por exemplo, o novo bloco 277.316 tem uma referência ao hash de seu bloco pai 277.315. A maioria dos nodos que recebem o 277.316 já terão o bloco 277.315 como o topo de suas corrente principal e, portanto, vincularão o bloco novo e estenderão a corrente. 

Às vezes, como nós veremos em Forks (bifurcações) da Blockchain, o bloco novo estende um corrente que não está na corrente principal. Nesse caso, o nodo irá anexar o bloco novo à corrente secundária que ele estende e então irá comparar a dificuldade da corrente secundária com a dificuldade da corrente principal. 

Se a corrente secundária possuir uma dificuldade acumulada maior do que a da corrente principal, o nodo irá convergir novamente para a corrente secundária, ou seja, ele irá selecionar a corrente secundária como sua nova corrente principal, fazendo com que a corrente principal anterior se torne uma corrente secundária. 

Se o nodo for um minerador, ele irá construir um bloco ao estender essa corrente nova, que é mais longa. Se um bloco válido é recebido e nenhum pai é encontrado na correntes existentes, o bloco é considerado um "órfão". Os blocos órfãos são salvos no pool de blocos órfãos, onde eles ficam até que o seus pais sejam recebidos. 

Assim que o bloco pai é recebido e vinculado às correntes existentes, o bloco órfão pode então sair do pool e ser vinculado a seu bloco pai, passando a fazer parte da corrente. Os blocos órfãos geralmente surgem quando dois blocos que foram minerados em um curto espaço de tempo são recebidos em ordem inversa, ou seja, o bloco filho é recebido antes do bloco pai. 

Como selecionam a corrente com mais dificuldade, todos os nodos acabam atingindo um consenso 32 disseminado na rede. As discrepâncias temporárias entre as correntes acabam sendo resolvidas à medida que se adiciona mais prova-de-trabalho, estendendo uma das possíveis correntes. 

Os nodos mineradores "votam" com seu poder de mineração ao escolher qual corrente eles irão estender através da mineração do próximo bloco. Ao minerar um bloco novo e estender a corrente que eles escolheram, os mineradores estão votando nessa corrente. Na próxima seção iremos ver como discrepâncias entre cadeias em competição (forks) são resolvidas através da seleção independente da cadeia de maior dificuldade.

FONTE - Esse é um trecho do livro 'Mastering Bitcoin


EmoticonEmoticon