A transação coinbase atribui a recompensa do bloco: os novos bitcoins permitidos e as taxas das demais transações. Diferentemente de um pagamento comum, ela não gasta fundos recebidos antes. Ela só é válida dentro de um bloco válido, e sua recompensa não pode ser gasta imediatamente. O nome indica um tipo de transação, não a corretora Coinbase.
Imagine Ana preparando um bloco candidato para minerar. Ela reúne pagamentos dos usuários e coloca antes deles uma transação especial que indica os destinatários da recompensa. No exemplo, as regras permitem criar 3,125 BTC, e os pagamentos escolhidos trazem 0,075 BTC de taxas. Ana pode reivindicar, portanto, no máximo 3,2 BTC. Essa primeira transação é a coinbase. Registrá-la ainda não garante a recompensa: o bloco precisa atender ao requisito de mineração e a todas as demais condições, verificadas pelos próprios nós que o recebem. Se Ana pedir demais, eles rejeitam o bloco inteiro, por mais energia que tenha gasto para encontrá-lo. Nenhuma conta central envia o pagamento. As novas moedas surgem pelas regras compartilhadas dentro de um bloco aceito. Dos 3,2 BTC do exemplo, só 3,125 BTC são novos; os usuários pagaram o restante. É uma recompensa, não lucro: os custos da mineração ainda não foram descontados. [6] [4]
A nova emissão permitida se chama Block Subsidy e cai periodicamente pela metade no Halving. Satoshi é a menor unidade do bitcoin. As taxas dependem dos pagamentos concretos incluídos, por isso dois blocos podem render recompensas diferentes. O teto soma a emissão permitida para a altura, calculada por GetBlockSubsidy no Bitcoin Core, às taxas das demais transações válidas do bloco. Só a emissão aumenta a quantidade de bitcoins; as taxas são satoshis existentes. O minerador pode receber menos, mas não cobrar a diferença depois: a emissão não reivindicada nunca ocorre e as taxas não recolhidas ficam permanentemente impossíveis de gastar. Um único satoshi a mais invalida o bloco inteiro. [4] [6]
A recompensa costuma ir para um pool, que coordena vários mineradores. Um script de bloqueio é um pequeno programa que define as condições para gastar uma saída. PPS, FPPS e PPLNS são formas diferentes de distribuir a receita do pool entre participantes. As saídas usam scripts de bloqueio comuns. A recompensa pode ir para um endereço coletivo, ser dividida entre destinatários ou incluir uma parte para o operador do pool. Os nós verificam valores e condições de gasto, não contratos nem beneficiários reais. PPS, FPPS, PPLNS, valores mínimos de pagamento e repasses posteriores aos participantes são regras do pool, não do consenso Bitcoin. [6] [7]
Ana vê a recompensa no bloco, mas ainda não pode pagar a conta de luz com ela. Não é uma corretora retendo dinheiro: as regras do Bitcoin impõem a espera. A altura é o número da posição de um bloco; H indica aqui a altura do bloco em que a recompensa foi criada. COINBASE_MATURITY exige diferença mínima de 100 entre a altura do bloco que gasta a saída e aquela em que ela foi criada. Uma saída criada em H pode ser gasta pela primeira vez num bloco válido H+100. A contagem de confirmações pode parecer diferente, pois o bloco criador já conta como a primeira. Importa a diferença de alturas, não uma estimativa em horas. Cumprir essa condição não garante que o bloco nunca deixe a cadeia. [5]
Uma reorganização faz o nó mudar para outra ramificação válida com mais trabalho de mineração acumulado. UTXO são saídas não gastas, os valores individuais disponíveis. Uma recompensa pode desaparecer desse conjunto junto com seu bloco. Uma reorganização pode retirar o bloco original da cadeia válida ativa com mais trabalho acumulado. Suas saídas coinbase desaparecem do conjunto UTXO ativo. Transações que gastam a recompensa também podem ser afetadas. Esperar 100 blocos limita os efeitos de reorganizações curtas, sem garantia absoluta. O pool deve separar recompensa na cadeia ativa, possibilidade de gasto e obrigações próprias com os mineradores. [4] [5]
Alguns nomes descrevem o formato: uma entrada normalmente aponta para fundos gastos; uma saída define um valor e suas condições de gasto. O txid identifica a transação, a versão define o formato e locktime pode limitar quando ela entra no bloco. Todo bloco precisa conter ao menos uma transação; apenas a primeira pode ser coinbase. Ela tem uma entrada com referência nula a uma saída anterior: hash de 32 bytes zero e índice 0xffffffff. Essa referência, chamada outpoint, não gasta nada anterior, portanto não há uma assinatura comum desse gasto para verificar. A transação ainda tem txid, versão, locktime e uma ou mais saídas. [1] [2] [3]
Altura é o número da posição de um bloco. BIP34 identifica uma proposta cuja regra o Bitcoin adotou; scriptSig é um campo da entrada, e CScript representa instruções e números de scripts. BIP34 exige que scriptSig comece com a altura do bloco como número CScript com codificação mínima. O campo completo ocupa 2–100 bytes. Depois podem vir uma extra nonce, a identificação do pool ou dados de mineração mesclada. Altura ou comprimento incorretos causam rejeição. Embora a entrada não execute um script normal de desbloqueio, seus opcodes de assinatura podem contar para o limite sigops, que limita o número de operações de assinatura. [1] [9]
A mineração calcula repetidamente um hash, a impressão digital do resumo do bloco chamado cabeçalho. Nonce é um número que se altera; a raiz de Merkle resume as transações em uma impressão conjunta. Alterar uma transação abre novas tentativas. O nonce do cabeçalho tem 32 bits, e os equipamentos esgotam suas possibilidades rapidamente. O programa também altera uma extra nonce na coinbase: mudam o txid, a raiz de Merkle e o cabeçalho, abrindo outro espaço de busca por hashes. O pool distribui o trabalho para evitar que dispositivos testem desnecessariamente as mesmas variantes. A extra nonce não cria moedas adicionais. [6] [7] [12]
SegWit separa certos dados de verificação, como assinaturas, em uma parte chamada witness. Um commitment liga dados de maneira verificável, não representa outro pagamento. O formato abaixo é a referência técnica dessa ligação. Se o bloco contém dados witness, BIP141 exige uma saída coinbase com witness commitment, uma ligação criptográfica com esses dados. O script começa com 6a24aa21a9ed: OP_RETURN, inserção de 36 bytes e marcador aa21a9ed. Segue um hash SHA-256 duplo de 32 bytes da raiz de Merkle witness concatenada ao valor reservado. O witness da entrada coinbase deve conter somente esse valor reservado de 32 bytes. Havendo várias saídas correspondentes, vale o maior índice. Não é um pagamento gastável; sem dados witness no bloco, o commitment é opcional. [10]
Um Full Node é um computador que verifica as regras do Bitcoin por conta própria. O peso do bloco mede o uso da capacidade de dados permitida; o Mempool guarda localmente transações comuns não confirmadas. Conferir a recompensa faz parte de conferir o bloco inteiro. Um Full Node exige coinbase em primeiro lugar e rejeita outras coinbase no mesmo bloco. Verifica scriptSig, altura BIP34, limites de valores, peso do bloco, taxas e witness commitment necessário. O total das saídas não pode superar emissão permitida mais taxas; gastos posteriores precisam respeitar a maturidade. O minerador não pode atribuir validamente qualquer valor a si mesmo. Sem seu bloco, coinbase não entra no Mempool. [3] [4] [10]
Genesis Block é o bloco inicial do Bitcoin. Sua condição especial e os antigos identificadores repetidos explicam por que as regras comuns de hoje não devem ser aplicadas indiscriminadamente a todo caso histórico. Antes da altura obrigatória, diferentes coinbase podiam ter o mesmo txid. BIP30 impede sobrescrever saídas antigas ainda não gastas; BIP34 acrescenta uma altura distintiva nos blocos modernos comuns. Genesis Block é especial: sua coinbase está no bloco registrado, mas a inicialização não tornou sua saída gastável. Os 50 BTC originais não podem ser gastos; não se trata de uma espera normal por 100 blocos. [8] [9] [11]
Para ter uma visão mais completa, leia este verbete junto com Block, Block Subsidy, Transaction Fees, Mineração, Block Template, Bitcoin. Também há referências a este verbete em Block Subsidy, Confirmação, Reorg, Stale Block.