Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 12893|Resposta: 1

O princípio do protocolo de estrato para comunicação entre máquinas de mineração e piscinas de mineração

[Copiar link]
Publicado em 22/01/2018 10:23:14 | | | |
O protocolo Stratum é atualmente o protocolo de comunicação TCP mais comumente usado entre mineradores e pools de mineração. Vamos explicar brevemente a arquitetura de rede da mineração.


1. Arquitetura de rede de mineração


O Bitcoin é uma arquitetura de rede descentralizada que encaminha novas transações e bloqueios instalando nós com daemons do Bitcoin. Máquinas de mineração e pools de mineração também formam outra rede, que chamamos de rede mineradora.

A rede de mineração é dividida em várias partes principais, como máquinas de mineração, pools de mineração, carteiras, etc., e às vezes o software de pool de mineração é instalado junto com a carteira, o que pode ser chamado coletivamente de pool de mineração.

O protocolo de comunicação entre a máquina de mineração e o software do pool de mineração é o stratum, enquanto a comunicação entre o software do pool de mineração e a carteira é a interface bitcoinrpc.

o estrato é o formato de dados JSON, e o protocolo específico é o seguinte:



2. Acordo do estrato


1. Assinatura de tarefas

Quando a máquina de mineração inicia, ela primeiro se conecta ao pool de mineração usando o método mining.subscribe para assinar o trabalho.

O pool retorna o número de assinatura, ExtraNonce1, e ExtraNonce2_size no mining.notify.

Client:{"id":1,"method":"mining.subscribe","params":[]}

Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null}

Entre eles:

AE6812eb4cd7735a302a8a9dd95CF71f é o número da assinatura;

08000002 é o ExtraNonce1, que é usado para construir transações coibase;

ExtraNonce2_size é 4, o número de bytes do contador ExtraNonce2 do minerador.

2. Alocação de tarefas

Esse comando é periodicamente enviado ao minerador pelo pool de mineração, e quando a máquina de mineração se registra com o método mining.subscribe, o pool de mineração deve imediatamente retornar a tarefa como mining.notify.

Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"}

Entre eles:

Número da tarefa: "namorado";

HASH do bloco anterior:

"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000";

Coinbase Parte I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008";

Coinbase Parte 2:

"072f736c7573682f00000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac00000000";

Lista de IDs de Transação:

["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"];

Número da versão do bloco: "00000002";

nBit:”1c2ac4af”;

Horário atual: "504e86b9";

Tarefas de limpeza: Se for verdade, o minerador abortará todas as tarefas e iniciará uma nova tarefa imediatamente. Se for falso, espere até que a tarefa atual termine antes de iniciar uma nova tarefa.

3. Login de máquina de mineração

O minerador usa o método mining.authorize para fazer login no pool de mineração com uma conta e senha específicas, a senha pode ficar vazia e o pool de mineração retorna o retorno de login com sucesso. Esse método deve ser feito imediatamente após inicializar a conexão, caso contrário o minerador não receberá a tarefa do pool.

Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}

Server:{"error":null,"id":2,"result":true}

4. Submeter os resultados

Quando um minerador encontra uma participação legítima, ele envia uma tarefa ao pool usando o método "mining.submit". Se o pool retorna verdadeiro, o commit é bem-sucedido, e se falhar, há um motivo específico para o erro.

Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}

Server:{"error":null,"id":4,"result":true}

Entre eles:

Nome de usuário: "miner1";

Número da tarefa: "namorado";

ExtraNonce2:"00000001";

Horário atual: "504e86ed";

nonce:”b2957c02″;

5. Ajuste de dificuldade

O ajuste de dificuldade é emitido pelo pool de mineração para a máquina de mineração para ajustar a dificuldade de mining.set_difficulty forma, e o valor de dificuldade está nos parâmetros.

Server:{"id":null,"method":"mining.set_difficulty","params":[2]}

O minerador aplicará a nova dificuldade na próxima tarefa, e o pool às vezes emitirá uma nova tarefa imediatamente e configurará a tarefa de limpeza para true, para que o minerador possa trabalhar na nova dificuldade imediatamente.



3. Processo geral de comunicação


O processo geral de comunicação entre a máquina de mineração e o pool de mineração é o seguinte:

Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com