Transação Coinbase
A primeira transação de um bloco, que cria novos bitcoins
Uma transação coinbase é a primeira transação de um bloco.
Ela é colocada lá pelo minerador quando ele constrói o bloco candidato, para poder reivindicar a recompensa do bloco (subsídio + taxas) se conseguir minerar o bloco.
É um tipo especial de transação que tem uma única entrada em branco. Em outras palavras, as saídas das transações coinbase são a fonte de novos bitcoins.
Requisitos
O que tem de diferente em uma transação coinbase?
Uma transação coinbase tem a mesma estrutura básica de uma transação normal, mas com alguns requisitos especiais:
- Tem uma única entrada em branco: o TXID é todo zeros e o VOUT é o valor máximo
0xffffffff. - O minerador pode colocar qualquer dado que quiser no ScriptSig (não há nada a destravar).
- A saída trava a recompensa do bloco a um endereço do minerador.
Ao longo do tempo, alguns requisitos adicionais foram colocados na transação coinbase devido a atualizações, mas a estrutura básica permaneceu a mesma.
Exemplos
Como é uma transação coinbase?
1. Básica
Altura: 0 a 227.835
Esta é a transação coinbase do bloco 150.007:
01000000 01
0000000000000000000000000000000000000000000000000000000000000000 ffffffff
08 04233fa04e028b12 ffffffff
01
30490b2a01000000 43 41047eda6bd04fb27cab6e7c28c99b94977f073e912f25d1ff7165d9c95cd9bbe6da7e7ad7f2acb09e0ced91705f7616af53bee51a238b7dc527f2be0aa60469d140ac
00000000 Como você pode ver, ela só tem uma entrada em branco. O TXID é todo zeros e o VOUT é o valor máximo 0xffffffff. Esse é o requisito básico de toda transação coinbase. Há só uma saída, com valor de 5000350000 sats (subsídio de 5.000.000.000... na verdade 50 BTC menos halvings; aqui as 350000 sats extras foram as taxas das outras 10 transações do bloco), travada com um script P2PK.
2. Altura na Coinbase
Altura: 227.836+ (BIP 34)
Devido à BIP 34, a partir da altura 227.836 os mineradores precisam colocar a altura do bloco atual no início do ScriptSig. Por exemplo, o ScriptSig da coinbase do bloco 400.021 é:
03951a0604f15ccf5609013803062b9b5a0100072f425443432f20 Esse ScriptSig contém quatro pushes de dados separados:
951a06– A altura do bloco atual em little-endian. Convertendo para big-endian temos061a95, que em decimal é 400021.Little Endian
f15ccf56e013803062b9b5a0100– Desconhecidos. Não decodificam para texto ASCII específico, então podem ter sido ExtraNonces.2f425443432f20– Os bytes ASCII do texto "/BTCC/", que é a etiqueta do minerador.ASCII
Apenas o primeiro push (a altura do bloco) era obrigatório. Depois disso, o minerador era livre para incluir qualquer dado.
A razão de incluir a altura na transação coinbase é evitar TXIDs duplicados.
3. SegWit
Altura: 481.824+ (BIP 141)
Desde a atualização SegWit, toda transação coinbase precisa incluir um valor reservado de testemunha (witness reserved value) de 32 bytes no campo de testemunha da entrada, e usar isso junto com uma raiz da testemunha (witness root hash) para colocar um compromisso de wTXID (wTXID commitment) no ScriptPubKey de uma das saídas.
O compromisso de wTXID é calculado: você reúne os wTXIDs de todas as transações do bloco (com o wTXID da coinbase como todo zeros, para evitar referência circular), calcula a raiz de Merkle deles (a raiz da testemunha), e então faz o HASH256 da raiz da testemunha concatenada com o valor reservado.
Raiz de Merkle
HASH256
O compromisso de wTXID é então colocado no ScriptPubKey da segunda saída, prefixado com o cabeçalho de compromisso aa21a9ed (para sabermos que aquele ScriptPubKey contém o compromisso). Esse ScriptPubKey também começa com OP_RETURN, tornando a saída não gastável — o que é fine, pois ela não contém satoshis e serve apenas para o compromisso.
Se o bloco não contém nenhuma transação segwit, a coinbase não precisa incluir o valor reservado nem o compromisso de wTXID.
Maturidade da Coinbase
Quando você pode gastar uma transação coinbase?
As saídas de uma transação coinbase só podem ser gastas depois de a transação estar 100 blocos de profundidade na blockchain.
Por quê? Porque, se um minerador gastasse a saída da coinbase imediatamente e houvesse uma reorganização da cadeia que removesse o bloco da coinbase, então essa transação e todas as suas descendentes se tornariam inválidas. Como a coinbase contém a altura (e mudar a altura mudaria o TXID), essa exata transação não poderia voltar à blockchain depois, e todas as transações filhas ficariam permanentemente inválidas.
Então, esperando 100 blocos, você pode ter confiança de que a coinbase está cravada (reorganizações típicas só têm 1 ou 2 blocos de profundidade).
A coinbase poderia ser removida após 100 blocos por um ataque de 51%. Mas a regra dos 100 blocos serve para proteger dos problemas causados por reorganizações típicas.
Notas
- Moedas podem ser perdidas para sempre se um minerador não reivindicar a recompensa completa. Por exemplo, o subsídio do bloco 526.591 era 12,5 BTC, mas o minerador só enviou 6,25 BTC para si na saída da coinbase — perdendo 6,25 BTC. Não há razão para um minerador fazer isso, mas mostra que moedas podem ser perdidas se a coinbase não for construída corretamente.