Num cenário de teste, eu peguei dois nós (Bitcoin core 0.11.1 que é a última atualização agora) com as blockchain atualizadas, desliguei-os e reiniciei os nós via prompt de Command (CMD) interconectando apenas esses dois nós e ativado a mineração adormecida em um deles:
c:\......\bitcoin.exe -connect=10.0.0.10 -gen=1 -genproclimit=-1 <== isso no nó (ip:10.0.0.20) que seria o minerador.
c:\......\bitcoin.exe -connect=10.0.0.20 <== isso no nó (ip:10.0.0.10) acompanhante, só para o nó minerador se sentir em rede e começar a minerar.
Eu fiz uns pagamentos Bitcoin só para que existissem transações a serem incluídas no bloco. A CPU foi a 100% no nó minerador e a log deixava claro que foi startada a mineração com tantas transações quantas as que eu fiz + 1 (recompensa de 25 bitcoin). Deixei isso rodando uns 2 dias, durante esse tempo minha blockchain ficou desatualizada em relação a blockchain do mundo real, mas para esses dois nós, isolados do mundo de fora, eles sempre indicaram que estavam atualizados. Claro que nunca foi gerado nenhum bloco, a dificuldade é tamanha que para um computador simples, mesmo isolado, em tal nível de dificuldade acho que levaria centenas (senão milhares) de anos para esse bloco ser gerado. Desliguei tudo e estou tentando entender o que aconteceu.
A dúvida: Se todos os mineradores parassem de minerar menos 1, se esse único minerador que sobrou fosse uma máquina muito lenta (como minha experiência acima), supondo que esse minerador nunca desistisse de minerar as derradeiras bitcoins, esse minerador ficaria minerando para o resto da vida sem encontrar uma solução, ou o protocolo prevê que a dificuldade se reduziria ao tamanho desse único minerador poder gerar blocos de 10 em 10 minutos?
Pergunto isso porque li que é calculado uma média (baseada em um número fixo de blocos gerados) e se está não for 10 minutos, então a dificuldade é ajustada, para + ou -, mas que retorne a mineração de um bloco a 10 minutos em média. Se a queda do poder de mineração for pequena, então ainda serão gerados a quantidade de blocos necessária para compor a média, mas se a queda do poder de mineração for enorme, então uma mais seria gerada uma bitcoin, nunca seria gerado a quantidade (pre-estabelecida) de blocos necessária para fazer a média.
Claro que isso é uma situação limite que nunca acontecerá, a menos que seja num ambiente de teste como o descrito acima, mas qual seria o resultado se eu nunca desligasse a experiência acima?
Duas perguntas em uma. Só pra entender como funciona e para saber se ainda existe capacidade de mineração nos full nodes bitcoins, mesmo que impossível encontrar a resolução de 1 único bloco num computador comum nas dificuldades atuais.
Olá,
Muito legal o seu experimento.
Quanto a sua pergunta, a dificultade é ajustada a cada 2016 blocos. Com isso, se esse cenário acontecesse faltando apenas 1 bloco para completar os 2016, depois de "centenas (senão milhares) de anos" a dificuldade seria ajustada. Nesse cenário entretanto a dificuldade seria reduzida muito pouco, pois a maioria dos blocos teriam sido gerados normalmente e apenas no último a dificuldade foi drasticamente reduzida.
No pior cenário, muitos blocos (até um máximo de 2016) teriam que ser gerados para que a dificuldade fosse recalculada, e talvez esse processo tivesse que ser realizado algumas vezes até que a dificuldade fosse devidamente ajustada (retornando para o tempo médio entre blocos de 2016).
Algumas altcoins já passaram por dificuldade semelhante, não me lembro do nome mas talvez alguém lembre poste aqui daqui a pouco. Pode ser interessante ver as soluções que adotaram.
Nesse cenário catastrófico, a solução parece ser atualizar o código fonte e rodar uma nova versão que forçaria a redução da dificuldade de alguma maneira. Isso geraria um hardfork na blockchain, pois se os nodes não alterados receberem esses blocos ou transações validadas nos mesmos eles não reconheceriam como válidos.
Abraço,
Adriano