O que tem dentro de um bloco: cabeçalho, altura, tamanho e subsídio
Um bloco é um pequeno cabeçalho fixo mais um corpo de transações. Saber qual é qual explica de qual parte a mineração realmente calcula o hash e por quê.
Duas partes, e só uma delas passa pelo hash
Um bloco tem um cabeçalho e um corpo. O corpo são as transações, e pode ter algumas centenas de bytes ou vários megabytes, dependendo de quão movimentada a blockchain está. O cabeçalho é um resumo fixo do bloco, e na maioria das blockchains tem exatamente 80 bytes.
A mineração calcula o hash do cabeçalho e de nada mais. Esse é o fato mais útil deste artigo, porque explica algo que de outra forma parece impossível: um programa de mineração testa bilhões de variações por segundo, e não conseguiria fazer isso se cada tentativa exigisse refazer o hash de um bloco cheio de transações. Não exige. Ele refaz o hash de 80 bytes.
Os seis campos do cabeçalho
O cabeçalho guarda uma versão, o hash do bloco anterior, a raiz de Merkle, um carimbo de tempo, os bits de dificuldade e o nonce. Cada um deles está lá por um motivo, e dois deles fazem a maior parte do trabalho.
O hash do bloco anterior é o que faz disso uma cadeia. Cada cabeçalho aponta para o anterior, então reescrever um bloco antigo mudaria o hash dele, o que quebraria o cabeçalho seguinte, e o seguinte, até a ponta. Esse é todo o argumento de segurança da prova de trabalho num único campo.
A raiz de Merkle é um único hash que resume todas as transações do corpo. Mude uma transação, mesmo que em um só byte, e a raiz de Merkle muda, então o cabeçalho muda, então todo hash tentado até ali perde o valor. É assim que 80 bytes podem representar de forma honesta um bloco de qualquer tamanho.
Os bits de dificuldade são o alvo abaixo do qual o hash precisa ficar, numa forma compacta. O carimbo de tempo é aproximadamente quando o bloco foi criado, e pode ser aproximado. O nonce é o campo que o programa de mineração pode mudar à vontade, e é o que torna a busca possível.
O nonce se esgota, e tudo bem
O nonce é um contador pequeno, e um programa de mineração moderno esgota todos os valores que ele comporta quase instantaneamente. Isso parece um beco sem saída e não é, porque o nonce é só a coisa mais conveniente de mudar, nunca a única.
Quando ele se esgota, o programa de mineração muda outra coisa que alimenta o cabeçalho. O carimbo de tempo pode avançar. A transação coinbase pode ser levemente alterada, o que muda a raiz de Merkle, o que dá um cabeçalho totalmente novo para buscar. Num pool, é exatamente para isso que serve o extranonce: ele permite que o pool dê a cada minerador um ponto de partida diferente, para que dois deles nunca fiquem moendo os mesmos números.
A altura é uma posição, não um campo
A altura do bloco é quantos blocos vieram antes de um determinado bloco. O bloco gênesis tem altura zero, o seguinte tem um, e assim por diante. É o número que você vê ao lado de cada entrada na página Blocos do pool e em qualquer explorador.
Vale saber que a altura não fica de fato guardada no cabeçalho. Ela é derivada da posição do bloco na cadeia. Na maioria das blockchains modernas, a altura também é escrita na transação coinbase, uma regra adicionada depois para que dois blocos em alturas diferentes nunca possam ser idênticos byte a byte, mas a resposta oficial sobre a altura de um bloco continua sendo a sua posição.
É também por isso que a altura é a forma natural de falar de confirmações. Uma transação enterrada seis blocos abaixo é uma cujo bloco está seis alturas abaixo da ponta, e cada bloco a mais torna reescrevê-la ainda mais caro.
O tamanho é o corpo, e é ele que enche
O tamanho do bloco é basicamente o tamanho do corpo, porque o cabeçalho é desprezível perto dele. Quando dizem que uma blockchain tem um limite de tamanho de bloco, estão falando de quantas transações cabem, não do cabeçalho.
Um bloco cheio e um bloco vazio exigem exatamente o mesmo trabalho de mineração. A dificuldade decide quão difícil é encontrar um bloco; o tamanho decide quanto o bloco carrega. Uma coisa não tem relação com a outra, e confundi-las é a origem de muita intuição errada sobre taxas.
O que o tamanho afeta é o mercado de taxas. Quando há mais transações querendo entrar do que espaço, as que oferecem taxas maiores entram primeiro, e o total de taxas no bloco sobe. Isso vai direto para o que o bloco paga.
A transação coinbase e o subsídio
A primeira transação de todo bloco é especial. Ela não tem remetente, cria moedas do nada e as paga a quem fez o bloco. Ela se chama transação coinbase, e não tem nada a ver com a exchange de mesmo nome.
O que ela paga é o subsídio mais as taxas de todas as outras transações do bloco. O subsídio é a parte recém-emitida, definida pelo cronograma de emissão da rede e reduzida com o tempo na maioria das moedas. As taxas são o que os usuários anexaram às suas transações para serem incluídas. Juntos, eles formam a recompensa de bloco.
Em um pool, a coinbase paga o pool, que então distribui a recompensa entre todos que contribuíram com shares naquela rodada. Isso não é um desvio: é assim que um pool consegue pagar muitas pessoas por uma recompensa que chega como um único pagamento indivisível.
Por que tudo isso importa enquanto você minera
Três coisas ficam óbvias quando o formato de um bloco fica claro, e as três aparecem o tempo todo.
- Por que um novo bloco invalida seu trabalho na hora. O campo do hash do bloco anterior mudou, então o cabeçalho que você estava buscando não existe mais. Qualquer coisa que você enviar para ele depois é um share stale, e nenhuma velocidade resolve isso.
- Por que o pool envia trabalho novo com tanta frequência. Cada nova transação que o pool quer incluir muda a raiz de Merkle, e um modelo mais recente traz mais taxas, ou seja, mais recompensa pelo mesmo esforço.
- Por que o tamanho do bloco nunca aparece em uma estimativa de ganhos. O que você ganha é decidido pela dificuldade, pelo subsídio e pelas taxas, não por quantos bytes havia no corpo.
A página Blocos deste pool mostra a altura, a recompensa e quando o bloco foi encontrado, que é a parte útil de tudo isso resumida em uma linha. O explorador mostra o resto, incluindo a transação coinbase que pagou o bloco.