Como funciona a mineração em pool e como ela é diferente da mineração solo?
Neste artigo, vamos explicar qual é a diferença entre mineração solo e em pool. Já falamos sobre mineração em pool e mineração solo. Mas neste artigo iremos um pouco mais fundo.
Já falamos sobre Prova de Trabalho (PoW) neste artigo. Aprendemos que o minerador usa um número nonce para manipular a saída de hash até que a solução correta seja encontrada. Isso aplica-se apenas (parcialmente) no caso em que o minerador está a minerar sozinho (solo) - participando da solução/validação do bloco de transações por conta própria - a maneira antiga de minerar antes dos pools.
Se começarmos a falar sobre mineração num pool, as coisas começam a ficar um pouco mais complicadas. Todo o trabalho que o minerador fez durante a mineração solo deve ser distribuído por outros mineradores e evitar que dois ou mais mineradores resolvam o mesmo nonce.
Depois de compreender o princípio de distribuir o trabalho do pool para os mineradores, tudo ficará claro e fácil de entender o que é um trabalho de mineração.
Como é que o minerador adivinha os números nonce ao minerar sozinho?
Primeiro, vamos relembrar o nosso conhecimento sobre mineração solo.
O node (que na verdade também é um minerador na blockchain) irá “coletar” todas as transações que estão à espera para serem processadas e incluí-las num bloco. Este é o chamado bloco de transações. Ele incluirá apenas uma certa quantidade de transações porque um bloco Bitcoin tem um limite de quantas transações podem ser incluídas no bloco.
Em seguida, o minerador começará a adivinhar o número nonce até que a saída hash das transações e o número nonce comecem com uma certa quantidade de zeros (dificuldade de rede).
Uma vez encontrada a saída de hash correta, o minerador transmite a solução para a rede e, se tudo estiver correto, ele recebe a recompensa do bloco.
Você pode usar o formulário abaixo e adivinhar o número nonce até que a saída de hash correta seja encontrada. Comece inserindo dados aleatórios no campo DATA e adivinhe o número nonce até que o formulário fique verde. Ou você pode pressionar o botão MINE para encontrar o número nonce automaticamente.
Como é que o minerador adivinha os números nonce ao minerar num pool?
Ok, agora sabemos que o minerador deve adivinhar/manipular os números nonce para obter a saída de hash correta. Mas o que acontece se a dificuldade exigida (número de zeros no formulário acima) for muito grande? O minerador que estava a minerar solo terá uma probabilidade menor de encontrar o número nonce correto e, portanto, menor frequência de encontrar um bloco.
O minerador solo encontra uma solução para pedir aos seus amigos que comecem a minerar como um grupo de mineradores - um grupo de mineradores é conhecido como pool. Agora, o pool de mineradores parecerá mais forte na blockchain e terá uma probabilidade maior de encontrar o número nonce correto e obter a recompensa do bloco, aumentando assim a frequência de pagamento.
Mas como é que o operador do pool pode ter certeza de que os mineradores não estão a adivinhar o mesmo nonce? Se 2 ou mais mineradores estão a adivinhar o mesmo intervalo de nonces, ou eles têm a mesma posição inicial (por exemplo, todos começam a adivinhar o nonce em 0 e o incrementam em 1), então eles estão a adivinhar os mesmos números de nonce. Se todos os mineradores tiverem a mesma velocidade de adivinhação (hashrate), não faria diferença minerar juntos, pois todos encontrariam a solução aproximadamente ao mesmo tempo.
Em vez disso, o operador do pool espalharia a “posição inicial” do nonce para cada trabalhador. O pool pode distribuir o trabalho entre todos os trabalhadores dividindo o número nonce em duas partes. Isso permite que o pool envie uma parte do intervalo nonce para o primeiro minerador e a outra parte para o segundo minerador. Assim, mais alcance é coberto mais rapidamente.
Explicação Detalhada
Como visto no formulário acima, o nonce é um número aleatório que está a ser adivinhado. Para simplificar, diremos que o número nonce que resolve o bloco imaginário da transação pode variar de 0 a 100.000.
Se tivermos um minerador, a fazer mineração solo, ele começará a adivinhar o nonce em 0 e trabalhará até 100.000. Um dos números nonce entre 0 e 100.000 criará uma saída hash que corresponde à dificuldade alvo (quantidade de zeros no início da saída de hash). Assim que o minerador encontra o nonce correto, ele recebe a recompensa.
Se o pool distribuir o trabalho para vários mineradores, o pool dividirá o intervalo nonce em duas partes. A primeira parte da mensagem será um valor fixo que o minerador recebe, por exemplo 20 000 (a faixa de 20 mil). A segunda parte da mensagem (parte variável) serão os 20 000 (centenas) que podem ser manipulados pelo minerador. O minerador será responsável por apenas adivinhar a segunda parte.
Exemplos de nonces que um dos mineradores irá adivinhar no nosso caso são: 20+001, 20+002, 20+003, até 20+999. O segundo minerador pode estar a adivinhar nonces na faixa de 30.000 (os 30 mil). Por exemplo 30+001, 30+002 até 30+999. No nosso exemplo hipotético, pode haver 99 (01.000 a 99.000) mineradores no total conectados ao pool.
Como é que o nonce é dividido?
O nonce é dividido em duas partes chamadas extranonce1 e extranonce2.
A primeira mensagem é chamada extranonce1 e é sempre diferente, mas fixa, para cada minerador conectado ao pool.
A segunda mensagem chama-se extranonce2 e esta é a parte do nonce que deve ser manipulada pelo minerador para tentar resolver os dados de entrada do bloco.
Podemos dizer que a diferença no hash entre a mineração solo e a mineração em pool é que o minerador está a adivinhar o intervalo nonce completo ao minerar solo, enquanto o minerador que minera em pool está a adivinhar apenas uma parte do intervalo nonce.
Outra parte importante da mineração em pool é a dificuldade. Quando se trata de mineração solo, o minerador solo está preocupado apenas com a dificuldade da rede de destino. Enquanto os mineiros em pool usam a dificuldade alvo fornecida pelo pool e não pela rede. A dificuldade do pool de destino é sempre menor do que a dificuldade da rede de destino.
Por exemplo, se a dificuldade da rede de destino exigir 10 zeros no início da saída de hash, a dificuldade de destino do pool poderá exigir apenas 2 zeros no início da saída de hash. Nesse caso, a saída hash deve começar com 2 zeros, mas não exatamente 2 zeros. O nonce que corresponde à dificuldade do pool também pode corresponder à dificuldade da rede. Se isso acontecer, o pool encontrará o bloco e distribuirá as recompensas a todos os mineradores com base no trabalho contribuído.
No caso em que o minerador esgotou todo o intervalo nonce que lhe foi atribuído pelo pool antes de encontrar a solução, a dificuldade do pool de destino é muito alta para o minerador (ou, ao contrário, o hashrate do minerador é muito alto)
Você pode verificar este formulário e ver como os mineradores estão a contribuir com o trabalho para o pool. Primeiro, insira dados aleatórios no campo Transaction Data, então selecione a dificuldade de rede desejada e clique em MINE.
Os mineradores irão adivinhar ou percorrer todo o extranonce2 disponível até que a solução seja encontrada. Se nenhuma solução for encontrada, o extranonce1 deve ser aumentado.
Repare que o formulário não possui a dificuldade do pool para a representação ser mais fácil. A dificuldade do pool permitiria que os mineradores encontrassem shares mais rapidamente e, assim, obter shares aceites antes de encontrar um bloco (dificuldade de rede). Se a dificuldade do pool for correspondida, isso não significa necessariamente que a dificuldade da rede será correspondida ou encontrada. Mas pode ser. As shares aceites permitem que o pool saiba quanto trabalho cada minerador contribuiu e distribua a recompensa de forma justa.
Repare que os exemplos acima são simplificados demais e são usados para uma representação mais fácil.
Como sempre, sinta-se à vontade para entrar no nosso servidor Discord e subreddit!