Bloco Candidato
O bloco que um minerador tenta adicionar à blockchain
Um bloco candidato é um bloco de transações que um minerador tenta adicionar à blockchain.
Durante a mineração, cada minerador coleta transações do seu memory pool em um bloco candidato. Ele então faz o hash desse bloco repetidamente para tentar obter um hash de bloco abaixo do alvo.
Se um minerador conseguir um hash de bloco abaixo do alvo, seu bloco candidato pode ser adicionado à blockchain. Ele então transmite esse bloco candidato "minerado" aos outros nós, que o verificam e o adicionam à sua blockchain também.
Em outras palavras, um bloco candidato representa o próximo bloco de transações a ser adicionado à blockchain.
Construção
Como você constrói um bloco candidato?
Há três passos básicos para construir um bloco candidato:
1. Selecionar transações
O primeiro passo é selecionar transações do memory pool que você quer incluir. Um minerador normalmente enche seu bloco candidato com as transações de maior taxa para maximizar a recompensa.
2. Construir a transação coinbase
A transação coinbase é a primeira transação de um bloco e é usada pelo minerador para reivindicar a recompensa.
A razão de construir a coinbase depois de selecionar as transações é que ela precisa conter um hash de raiz da testemunha, calculado com base nas transações incluídas no bloco.
3. Construir o cabeçalho do bloco
O cabeçalho do bloco é uma pequena quantidade de metadados que resume todos os dados do bloco. É o que um minerador faz o hash ao tentar minerar o bloco candidato. Ele contém seis campos (versão, bloco anterior, raiz de Merkle, tempo, bits, nonce), mas estes dois são os mais pertinentes:
- Bloco Anterior: Especifica o bloco existente sobre o qual o candidato será construído. Os mineradores sempre querem construir sobre a ponta da blockchain, pois só podem reivindicar a recompensa se o bloco fizer parte da cadeia mais longa.
- Raiz de Merkle: Uma impressão digital de todas as transações do bloco. Isso significa que você não pode mudar o conteúdo do bloco sem mudar a impressão digital — e por isso construímos o cabeçalho depois de selecionar as transações.
E pronto, a construção do bloco candidato está completa. A partir daqui, o minerador pode começar a trabalhar na mineração do bloco candidato.
Requisitos
Quais são os requisitos de um bloco candidato?
- Transação coinbase. A primeira transação do bloco precisa ser a transação coinbase (que reivindica a recompensa).
- Transações válidas. Todas as transações do bloco precisam ser válidas.
- Pais das transações. Se uma transação gasta a saída de outra transação no mesmo bloco, a transação "pai" precisa vir antes na ordem do bloco.
- Limite de tamanho. O bloco não pode exceder 4.000.000 unidades de peso.
- Operações de assinatura. Há um limite no número de operações de verificação de assinatura permitidas em um bloco.
Seleção de Transações
Quais transações um minerador inclui?
Um minerador quer maximizar as taxas que pode coletar, então seleciona as transações com a maior taxa por byte (sats/vbyte) do memory pool. Porém, ele também considera o feerate de ancestrais: uma transação de baixa taxa pode ser incluída se ela tiver uma transação "filha" de taxa alta que dependa dela (pagamento via "child-pays-for-parent").
Blocos Vazios
Por que alguns blocos só têm a transação coinbase?
Às vezes você vê um bloco minerado que só contém a transação coinbase (um "bloco vazio"). Isso acontece quando um minerador encontra um novo bloco e começa a minerar o próximo imediatamente, antes de ter selecionado e validado as transações do memory pool — para não perder tempo de mineração. Assim que monta o conjunto completo de transações, ele passa a minerar um bloco cheio.
Comandos
Você pode obter um modelo de bloco candidato do seu nó com bitcoin-cli getblocktemplate. Ele retorna as transações a incluir, o alvo atual, a altura e outras informações necessárias para montar e minerar um bloco candidato.