Noções Básicas de Blockchain - Trabalho de Mineração
Você deve ter ouvido que os trabalhos são enviados do pool para o minerador. Ou você pode ter visto que o trabalho do minerador foi aceite dentro da consola do minerador. Neste artigo vamos explicar o que é um trabalho de mineração.
O que é um trabalho de mineração?
Resumindo, um trabalho de mineração é uma mensagem que é enviada do pool para o minerador. Esta mensagem contém a dificuldade alvo do pool, informações extranonce1, extranonce2 e outras especificidades da blockchain que estão incluídas no bloco.
Se você ler este artigo sobre mineração de pool, aprenderá que um pool deve permitir que os mineradores saibam que números devem adivinhar para distribuir o trabalho entre todos os trabalhadores.
O pool e os trabalhadores sempre se comunicarão entre si. O pool enviará os dados do trabalho que precisam ser resolvidos enquanto o minerador ou trabalhador enviará de volta as soluções. Um trabalho de mineração é uma mensagem que o pool e o trabalhador enviam um ao outro.
Se o minerador encontrar uma solução para os dados fornecidos pelo pool, ele enviará de volta uma solução de trabalho de mineração, também conhecida como compartilhamento aceite (accepted share).
Que dados estão incluídos no trabalho do minerador?
Isso depende da blockchain. Moedas e algoritmos diferentes usam mensagens diferentes. Abaixo você encontrará os dados que são incluídos no trabalho de mineração:
- Job ID: Identificação do trabalho. Mineradores (trabalhadores) usam-na quando submetem uma share (solução) gerada a partir deste job ID.
- Previous Block Hash: Saída de hash do bloco anterior.
- Coinbase1: O minerador insere ExtraNonce1 e ExtraNonce2 após esta seção dos dados da transação.
- Coinbase2: O minerador anexa isso após a primeira parte dos dados da transação e os dois valores ExtraNonce.
- Merkle_Branch: A transação coinbase é hash contra as ramificações Merkle para construir a raiz markle final.
- Version: versão de bloco de Bitcoin
- nBits: Dificuldade de rede codificada
- nTime: Hora atual
- Clean_Job: Quando isso for verdade, o minerador para de trabalhar nos trabalhos anteriores e começará a trabalhar no novo trabalho recebido do pool.
Exemplo de um trabalho de mineração enviado do pool para o trabalhador
As cargas entre o minerador e o pool são codificadas como mensagens JSON-RPC.
"id":null,"method":"mining.notify","params":["0000000053c411aa","b87d45785c4cc00150867971b7233c4446dfb4bd0003cb690000000000000000","01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5103539f0b082f5669614254432f2cfabe6d6d138e19afd289f4e1bcc69389a865ede0bd9d642189026485bd4bde3e062686b3100000000000000012734e8daaaa0f6280bf91","ffffffff03e44e2826000000001976a914536ffa992491508dca0354e52f32a3a7a679a53a88ac00000000000000002b6a2952534b424c4f434b3a51115f17d525a3952237430d78f5f4b2f4bc63148fd82f364f77c5260048d97e0000000000000000266a24aa21a9edfcfe2c5bd8a7df958c20d29cd5457ef6565a30ae10bf137602d4b838288908a500000000",["93cbc2abc1128cc9569a4ecbba4188b25ce7c9c8b5e5c9a2810cf0973d82f717","322139a87a09d3037d340f393a1d89ad34b163a07a9a7012fd58d92ca5e038c5","34cfc928a8bb978ab345d66c4940f566b5a36a1b6f7f5c2a617f68acc4f0a1e8","e4cc101b5df77d48d7abeb9a52d1a4bd8768a5cab4b568f804849d793eb8c432","ef14da7b3a470fdd3074633f711a0dcf003c91f4b6b02074d64e51878aafbd37","5ddd66513381c05cb479bfd062daa043295ee608f7bb22082f7c9c2d7f0aac40","bfc4e8f1e80ae3697bccfea631520e2907c7ad9ae5f5e3385aa4c8472ad39624","e6edd6c37b6924f4d5ab9350b33d5c7912d6df8a77be4d2d432d91134c0e83da","7aac970301559306792b9d017e54012ac3b1711c10d2c147fb9cbc32d1f1c63a","40329f69e3152d4537fa6e84e62e2f0830a18e3089455a78d58a54efd9479005","9a9f5af30e3bbc67e282fda897531337ab7d87e1da95d79f4831e8867b888c92","415bb76a0d8183657e0a5ac2bab8676e6ffa27ee3b2565ba1769af7503e9efad"],"20000000","1707a429","6364e9cf",false]}
A mensagem acima parece desajeitada para os olhos humanos, então aqui está num formato um pouco mais fácil de entender a mensagem:
"id":null,"method":"mining.notify","params":["JobID","PreviousBlockHash","Coinbase1","Coinbase2",[MerkleBranch],"Version","nBits","nTime",false]}
Exemplo de uma solução de trabalho de mineração enviada do trabalhador para o pool
{"id":15866,"method":"mining.submit","params":["3HJ4xQWjAsKuTwL1QBg4b5875hNcYRrtAr.workerName","0000000053c411aa","0446000000","6364e9cf","75a22825"]}
E a explicação do mining.submit:
{"id":15866,"method":"mining.submit","params":["username","JobID","Extranonce2","nTime","nonce"]}
Como você pode ver, as IDs de trabalho em ambos os trabalhos é a mesma.