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:

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:

  1. 951a06 – A altura do bloco atual em little-endian. Convertendo para big-endian temos 061a95, que em decimal é 400021.
    Ícone Ferramenta Little Endian
    Ícone Ferramenta

    Little Endian

    Converta um número entre as ordens de bytes big-endian e little-endian.

    Tamanho:
  2. f15ccf56 e 013803062b9b5a0100Desconhecidos. Não decodificam para texto ASCII específico, então podem ter sido ExtraNonces.
  3. 2f425443432f20 – Os bytes ASCII do texto "/BTCC/", que é a etiqueta do minerador.
    Ícone Ferramenta ASCII
    Ícone Ferramenta

    ASCII

    Converta entre texto e bytes hexadecimais (codificação ASCII/UTF-8).

    0 caracteres 0 bytes

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.

Ícone Ferramenta Raiz de Merkle
Ícone Ferramenta

Raiz de Merkle

Calcule a raiz de Merkle a partir de uma lista de TXIDs (um por linha, na ordem de exibição/explorer).

Ícone Ferramenta HASH256
Ícone Ferramenta

HASH256

SHA-256 dupla. Faz o hash dos bytes de dados usando SHA-256 duas vezes: SHA256(SHA256(dados)).

0 bytes 0 bytes

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