A sequência de passos e deveres de um minerador

Olá, tudo certo?
Não compreendi a sequência de passos que ele deve tomar até outro bloco ser minerado… Ele descobre o nonce e adiciona novas transações? Ou ele adiciona novas transações depois descobre o nonce? A rede automaticamente detecta se uma transação é inválida?
Grato desde já =)

Olá Francisco, seja bem vindo!

Se for possível o Tiago aparece e te dá uma explicação melhor e mais técnica. O que eu posso te adiantar por enquanto é o seguinte:

1 - Ele (minerador) descobre o nonce e adiciona novas transações? Ou ele adiciona novas transações depois descobre o nonce?

Resposta: O nonce faz parte de um conjunto de dados que é chamado de cabeçalho do bloco. Além do nonce o cabeçalho tem data/hora, o hash do cabeçalho do bloco anterior, o hash baseado no bloco atual, a versão e o alvo que define qual é o hash que serve para o bloco que está sendo minerado. O cálculo desse hash é feito pelo próprio programa e funciona na base da tentativa e erro.

Sobre Nonce veja os vídeos abaixo que demonstram como funciona o processo de busca do Nonce e o encadeamento entre os blocos:

De forma escrita tem o artigo abaixo explicando o que é o nonce:

2 - A rede automaticamente detecta se uma transação é inválida?

Resposta: além do valor cada transação tem no mínimo 3 chaves criptografadas: a conta do remetente (chave pública), a senha do remetente (chave secreta) e a conta do destinatário (chave pública). Não é exatamente a rede (no caso do bitcoin a rede é do tipo P2P) que faz a validação. Esta tarefa é automática, ou seja, é feita pelos computadores dos mineradores rodando o programa (durante o processo de mineração).

Sobre transações veja nesta apostila, a partir da página 54 como funciona o processo de forma mais detalhada e técnica:

Para entender mais sobre blockchain o canal TechnoDine é uma opção. Especificamente sobre Nonce tem explicação nos vídeos 4 e 5. Dá para colocar a legenda em português se for preciso.

1 curtida

O processo de minerador para gerar um bloco de forma simplificada é:

  1. cria um cabeçalho novo com a versão no campo nVersion
  2. coloca a data correta no campo nTime
  3. preenche informações sobre o target/dificuldade da rede no campo nBits
  4. faz o link com o bloco anterior no campo hashPrevBlock
  5. coloca uma transação para ele mesmo com a recompensa do bloco caso ele seja aceito na rede após minerado.
  6. verifica a mempool e coleta/ordena transações suficientes para preencher um bloco (baseando-se nas que pagam mais taxa) em uma árvore merkel e coloca a impressão digital (hash) da raiz desta árvore no campo hashMerkleRoot. Cada transação é validada pelo nó antes de adicioná-la no bloco.
  7. coloca um certo nonce no nNonce e calcula o hash do bloco
  8. Se o hash calculado estiver abaixo do target do campo nBits, então considera o bloco minerado e o divulga para a rede, senão volta ao passo 7 até que se encontre o hash correto.
  9. caso um outro minerador encontre um bloco de mesma altura antes, volta ao passo 1.

Portanto o nonce é o ultimo dado a ser descoberto.
No passo 6 o minerador valida cada transação que ele decidiu colocar no seu bloco. Quando o bloco minerado é propagado na rede, os outros mineradores também validarão as transações que estão nele. Se uma única transação for inválida, então o bloco todo será descartado e o minerador do bloco original não receberá sua recompensa que foi adicionada no passo 5.

4 curtidas

Cecilio e Tiago, muito obrigado pela atenção!
Essa comunidade é muito importante, é incrível o que estão fazendo aqui, me sinto lisonjeado de fazer parte disso.
Muito obrigado novamente, espero também poder contribuir ajudando alguém também!

3 curtidas

Olá tiago tudo bom ?
Em umas pesquisas eu me deparei com isso (sua planilha que simplifica o entendimento de blockchain)

Se não for te ocupar de mais, poderia me explicar aonde no código está aceitando esse erro ? :sweat_smile: