Bitcoin Forum

Local => Português (Portuguese) => Topic started by: Hagade on July 27, 2014, 10:56:06 AM



Title: Bloco de bitcoin sorteado na rede P2P
Post by: Hagade on July 27, 2014, 10:56:06 AM
Fala pessoal.

Eu tenho uma dúvida que não quer calar:

Quando um bloco de bitcoins é encontrado na rede, diga-se minerado, de onde ele vem?

Os clientes que estão abertos, sendo usados para minerar, concorrem entre si, mas como realemente funciona o "encontrar um bloco na rede"?

Esses dias me fizeram essa pergunta e eu fiquei numa dúvida tremenda.

Muito Obrigado!
Edit: Eu não encontrei nada muito especifico e como não consigo ler o codigo fonte, fiz a pergunta aqui.  :)


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: algorista on July 27, 2014, 04:32:53 PM

A informação que você busca está nos links abaixo:

https://en.bitcoin.it/wiki/Target

https://en.bitcoin.it/wiki/Block_hashing_algorithm

Resumidamente, o processo de mineração consiste em escolher algumas transações (daquelas sem nenhuma confirmação) e com essas construir um bloco, então pegar o cabeçalho do bloco e gerar um hash "SHA256(SHA256(Block_Header))", e caso o hash gerado tenha uma quantidade minima de zeros a esquerda ele é considerado valido, caso contrário o software de mineração faz nova tentativa trocando o "nonce" ou mudando o conjunto de transações.

Estrutura do cabeçalho de um bloco:
https://i.imgur.com/IHETW0s.jpg

Como é impossível prever o hash que será gerado, o processo todo se torna uma questão de tentativa e erro, uma verdadeira loteria.

A quantidade de zeros a esquerda é o chamado target (ou mais conhecida como difficulty), e seu calculo é baseado no tempo médio dos últimos blocos, assim a rede sustenta um tempo médio por bloco em 10 minutos, apenas ajustando esse target.

Exemplo de bloco valido (com destaque aos zeros a esquerda):
https://i.imgur.com/FAyTJWH.jpg

https://blockchain.info/block-index/452778/000000000000000038e0ea75855c7b7f35c2743286587269f2cc8203d894d26d

Esse procedimento de mineração não é realizado pelos "clientes abertos" e sim pelos mineradores com seus hardwares e softwares específicos, que ficam conectados na rede coletando as transações e tentando formar os blocos para reclamar a recompensa de 25BTC por bloco válido.

O minerador que tiver o melhor hardware quase sempre achará o bloco primeiro, pois conseguirá fazer maior quantidade de tentativas no mesmo tempo, por isso existe uma corrida desenfreada pela aquisição de mais hashpower, e por isso existem as pools de mineração.


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: motaro on July 27, 2014, 07:02:53 PM
@Algorista,


Foi a explicação mais simples e exata que já vi sobre o processo de mineração.

Ficou fácil de explicar para maioria das pessoas.
(Y)


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: Parana on July 27, 2014, 09:23:39 PM
@ algorista:

PArabéns pela explicação, pois eu não via dessa forma. Já me perguntaram isso bem mais de umas 5 vezes e eu não tinha muitos argumentos para responder, muito menos fatos!!

 ;)


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: Parana on July 27, 2014, 09:55:44 PM
uma dúvida: A unica coisa que evita que alguém forge um boco é a merkle root das transações aguardando um bloco?



Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: girino on July 28, 2014, 01:12:46 AM
uma dúvida: A unica coisa que evita que alguém forge um boco é a merkle root das transações aguardando um bloco?



não, o que impede que vc forge um bloco são dois fatores:
1- a dificuldade (é dificil pacas criar um bloco valido) e
2- as confirmações. Seu bloco precisa ser "incluido" nos blocos seguintes pra ser válido.

como tudo é probablistico, existe a possibilidade de vc forjar um bloco e validá-lo antes que os outros mineradores consigam validar o bloco "concorrente",mas ela é muito pequena e diminui a cada nova "verificação" do seu bloco.


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: algorista on July 28, 2014, 03:08:14 AM
uma dúvida: A unica coisa que evita que alguém forge um boco é a merkle root das transações aguardando um bloco?

completando a resposta do @girino, além de ser muito difícil de construir um bloco valido (pela diff muito alta), esse bloco precisa ser propagado pela rede, e cada node que recebe o novo bloco irá validá-lo de acordo com as regras pre-estabelecidas no código fonte, então caso o novo bloco não esteja perfeito ele simplesmente será recusado, sem nenhuma consequência adicional.

Mas se o minerador que construiu o bloco inválido não rejeita-lo também, acabará criando um fork, sendo que o restante da rede terá um blockchain diferente do dele.

Isso de fato já aconteceu acidentalmente em 2013-03-11 quando alguns mineradores fizeram o upgrade pra versão 0.8 enquanto outros não aderiram permanecendo na 0.7, o que causou uma diferença no gerenciamento dos blocos maiores que 500k, sendo que a nova versão admitiu um bloco que a 0.7 considerou inválido.

O incidente é bem conhecido pelos usuários mais antigos, foi sinistro :o

https://github.com/bitcoin/bips/blob/master/bip-0050.mediawiki



Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: Hagade on August 03, 2014, 06:07:34 PM
Obrigado pelas respostas pessoal. Desculpe eu demorar pra postar aqui, pois a faculdade está me matando...

Mais uma dúvida: Supondo que diminuisse a mineração do bitcoin ( sei que é quase impossivel acontecer), mas se tiver digamos uma pessoa somente para achar os blocos, caso essa pessoa não ache o bloco em 10 minutos, ele é dado como lançado na rede, orfão ou algo assim? Ou o bloco só é achado mesmo quando ele é de fato minerado?

Hipotese: A mineração diminuiu e não tem ninguém minerando na rede. Os blocos são lançados / gerados mesmo assim?

Essa parte ainda não é muito clara pra mim.

Obrigado.

Tenham um bom FDS!!



Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: girino on August 03, 2014, 06:17:11 PM
Obrigado pelas respostas pessoal. Desculpe eu demorar pra postar aqui, pois a faculdade está me matando...

Mais uma dúvida: Supondo que diminuisse a mineração do bitcoin ( sei que é quase impossivel acontecer), mas se tiver digamos uma pessoa somente para achar os blocos, caso essa pessoa não ache o bloco em 10 minutos, ele é dado como lançado na rede, orfão ou algo assim? Ou o bloco só é achado mesmo quando ele é de fato minerado?

quem "lança" o bloco é quem minera. os 10 minutos são o tempo médio, mas ele pode ser encontrado com menos tempo ou mais. na média, 10 minutos. Se todo mundo parar de minerar de uma vez, vai demorar, sei-la, DIAS, talvez semanas, pra aparecer um novo bloco. a rede vai ficar lentíssima até a difficuldade se reajustar e o tempo médio voltar a ser de 10 minutos.

Quote
Hipotese: A mineração diminuiu e não tem ninguém minerando na rede. Os blocos são lançados / gerados mesmo assim?

Não. se ninguem minerar, a rede para e o bitcoi morre.

Quote
Essa parte ainda não é muito clara pra mim.

Obrigado.

Tenham um bom FDS!!

espero que tenha ficado mais claro agora.


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: Hagade on August 03, 2014, 06:23:57 PM
Obrigado pelas respostas pessoal. Desculpe eu demorar pra postar aqui, pois a faculdade está me matando...

Mais uma dúvida: Supondo que diminuisse a mineração do bitcoin ( sei que é quase impossivel acontecer), mas se tiver digamos uma pessoa somente para achar os blocos, caso essa pessoa não ache o bloco em 10 minutos, ele é dado como lançado na rede, orfão ou algo assim? Ou o bloco só é achado mesmo quando ele é de fato minerado?

quem "lança" o bloco é quem minera. os 10 minutos são o tempo médio, mas ele pode ser encontrado com menos tempo ou mais. na média, 10 minutos. Se todo mundo parar de minerar de uma vez, vai demorar, sei-la, DIAS, talvez semanas, pra aparecer um novo bloco. a rede vai ficar lentíssima até a difficuldade se reajustar e o tempo médio voltar a ser de 10 minutos.

Quote
Hipotese: A mineração diminuiu e não tem ninguém minerando na rede. Os blocos são lançados / gerados mesmo assim?

Não. se ninguem minerar, a rede para e o bitcoi morre.

Quote
Essa parte ainda não é muito clara pra mim.

Obrigado.

Tenham um bom FDS!!

espero que tenha ficado mais claro agora.

Então em tese, se uma pessoa somente estivesse minerando na rede, as transações de bitcoins seriam um terror!!!

Enquanto não se ajustasse a diff muita gente ia ficar com os bitcoins na rede esperando um proximo bloco. Estou enganado?

No inicio da moeda deve ter ocorrido algo assim. Eu me lembro que quando baixa o blockchain, os blocos iniciais são de 2009.

Essa hipotese que eu comentei deve ter realmente acontecido antes da moeda ter um valor comercial.

Obrigado pela resposta Girino.

até + pessoal


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: umaduvida on October 29, 2015, 01:23:01 AM
Eu teria mais uma duvida para complementar:

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.


Title: Re: Bloco de bitcoin sorteado na rede P2P
Post by: Adriano on October 29, 2015, 08:11:05 AM
Eu teria mais uma duvida para complementar:

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