É um conjunto aberto de protocolos: regras para trocar mensagens. O Mining Protocol transporta tarefas e resultados; Template Distribution e Job Declaration, opcionais, permitem usar um modelo de bloco próprio. Uma conexão V2, sozinha, não garante essa possibilidade.
Eva tem um ASIC, equipamento especializado em mineração de Bitcoin. Ela o conectou a um pool, que coordena vários mineradores e distribui recompensas. As máquinas procuram um resultado de cálculo que permita acrescentar um novo bloco, um conjunto de transações, ao histórico do Bitcoin. Precisa que a máquina receba as instruções certas e que os resultados cheguem ao pool que realmente escolheu. Mais adiante, também quer decidir quais transações tentará incluir em um bloco. Stratum V2 organiza a comunicação desses participantes. Mining Protocol é a base; Template Distribution e Job Declaration são partes opcionais para fornecer os dados do bloco e combinar tarefas próprias. Por isso, dois pools que anunciam V2 podem oferecer recursos diferentes. [1] [3]
Stratum V1 facilitou a colaboração entre mineradores, mas sua conexão normalmente sem criptografia deixava as mensagens legíveis no caminho. Em geral, o pool também escolhia as transações. Em 2019, Jan Čapek e Pavel Moravec, da Braiins, apresentaram Stratum V2 com Matt Corallo e outros desenvolvedores. Buscavam comunicação protegida e mais eficiente, além de maior autonomia para os mineradores. A especificação é pública e o desenvolvimento continua como projeto aberto. Isso não cria novas regras de validade dos blocos de Bitcoin nem promete automaticamente ganhos maiores. [8] [6]
Um terceiro no caminho pela internet entre Eva e o pool não deve conseguir ler ou alterar silenciosamente mensagens de mineração. V2 usa comunicação criptografada com verificação de integridade, chamada AEAD. A negociação criptográfica inicial Noise é obrigatória para conexões remotas segundo a especificação; seu uso na rede local pode ser opcional. O cliente verifica o servidor com a chave pública da autoridade do pool, obtida por um caminho confiável. Essa chave permite verificar a assinatura digital usada pelo servidor para comprovar sua identidade. Isso protege a transmissão, não tudo ao redor: o pool continua vendo os dados recebidos. A criptografia não comprova firmware seguro, contabilidade correta nem capacidade de pagar recompensas. [2] [10]
Eva nem sempre precisa trocar seu equipamento. Um Translation Proxy é um intermediário que pode receber Stratum V1 de uma máquina antiga e usar V2 na conexão com o pool. Proteger esse segundo trecho não muda a comunicação original entre ASIC e proxy: ela continua em V1 e precisa de proteção própria. Um proxy também pode atender várias máquinas em conjunto e reduzir o envio repetido das mesmas informações. Traduzir protocolos, por si só, não significa que Eva escolhe as transações. Isso exige funções adicionais e um pool que coopere. [7] [8]
Para escolher transações, Eva precisa saber quais são válidas e sobre qual bloco deve construir. Pode obter essas informações de seu próprio nó completo, que verifica as regras do Bitcoin por conta própria. Um Template Provider é um programa que fornece um modelo de bloco: um rascunho do futuro bloco, não um bloco pronto. Pode usar Bitcoin Core ou outro nó com o suporte necessário. Template Distribution envia atualizações diretamente, sem consultas repetidas a getblocktemplate. NewTemplate e SetNewPrevHash anunciam o modelo e a ligação com o bloco anterior; RequestTransactionData solicita os dados das transações e SubmitSolution devolve uma solução encontrada. [5]
Eva usa um Job Declarator Client, programa que recebe seus modelos e combina seu uso com um pool compatível com Job Declaration. No modo Full-Template, solicita um identificador de trabalho por AllocateMiningJobToken, informa as transações em DeclareMiningJob e, se necessário, responde a ProvideMissingTransactions. Depois envia SetCustomMiningJob ao servidor de mineração. O modo Coinbase-only não revela antecipadamente a lista de transações e não usa DeclareMiningJob; trabalha com o identificador atribuído e dados da coinbase, a transação especial que contém a recompensa do bloco. O pool pode recusar uma proposta, portanto conexões alternativas também importam. Escolher de forma independente as transações de um bloco pode distribuir decisões entre mais mineradores, mas não elimina a obrigação do pool de pagar recompensas. [4]
É possível entender o exemplo anterior sem conhecer os nomes das mensagens. Para configurar ou desenvolver programas, porém, o formato exato importa. V2 transmite dados binários, em uma representação combinada entre máquinas. O cabeçalho de uma mensagem tem 6 bytes; extension_type, msg_type e msg_length indicam a extensão, o tipo de mensagem e o tamanho do conteúdo. Após estabelecer a comunicação criptográfica, a primeira mensagem do protocolo é SetupConnection, que negocia protocolo, versão e funções exigidas. SetupConnection.Success confirma o sucesso. O rótulo V2 de um serviço não substitui esse acordo real entre programas específicos. [1]
Um canal é uma sessão de mineração separada dentro de uma conexão, não outra blockchain nem um canal de pagamento. Um Standard Channel atribui trabalho sobre o cabeçalho do bloco, um resumo curto de seus dados. Um Extended Channel permite ao intermediário dividir um espaço maior de tentativas usando extranonce, parte variável da transação coinbase. Um Group Channel facilita distribuir tarefas a vários canais em conjunto. OpenStandardMiningChannel e OpenExtendedMiningChannel abrem as sessões correspondentes. O motivo prático é simples: se duas máquinas testassem possibilidades idênticas, gastariam eletricidade fazendo o mesmo trabalho. [3]
O pool precisa medir continuamente a contribuição de Eva. Uma mining share é um resultado que satisfaz o limiar de dificuldade atribuído. A maioria das shares não atinge o limiar mais exigente da rede para um bloco, mas algumas podem atingi-lo. NewMiningJob ou NewExtendedMiningJob fornece a tarefa, SetNewPrevHash ativa a ligação com o bloco anterior e SetTarget define o limiar do canal. SubmitSharesStandard ou SubmitSharesExtended envia resultados com identificador da tarefa, número de sequência e dados variáveis do cabeçalho. Um resultado aceito ainda não é um pagamento à carteira. A remuneração do pool e a validade do bloco segundo o Bitcoin continuam sendo questões distintas. [3]
Primeiro verifica o suporte em seu equipamento, programa e pool escolhido. Depois identifica qual trecho está protegido, de onde vem a chave de verificação e se quer apenas uma transmissão mais segura ou também escolher por conta própria as transações de um bloco. A segunda opção exige Template Provider, Job Declarator Client e suporte correspondente do pool funcionando juntos. Eva acompanha atrasos, shares rejeitadas ou desatualizadas, registros de erros e o comportamento durante uma interrupção. As instruções precisam corresponder à versão usada. Stratum V2 pode melhorar a organização da mineração; não substitui a gestão segura dos equipamentos nem muda as regras pelas quais os nós completos verificam o Bitcoin. [6] [7]
Para ter uma visão mais completa, leia este verbete junto com Bitcoin, Mineração, Mining Pool, Braiins, Braiins Pool, ASIC Miner. Também há referências a este verbete em ASIC Miner, Mining Pool, Nonce, Marek ‘Slush’ Palatinus.