Transação Coinbase

A primeira transação de um bloco, que cria novos bitcoins

Diagrama mostrando a transação coinbase como a primeira transação do bloco, reivindicando a recompensa do bloco (subsídio + taxas).

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 do bloco + 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.

Diagrama mostrando as saídas das transações coinbase na blockchain como a fonte de todos os novos bitcoins.
Conteúdo

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:

Então, basicamente, uma transação coinbase só tem uma entrada em branco e, em seguida, trava a recompensa do bloco em uma nova saída.

Ao longo do tempo, alguns requisitos adicionais foram colocados na transação coinbase devido a atualizações, mas a estrutura básica da transação permaneceu a mesma.

  • Os mineradores são livres para colocar dados personalizados no campo ScriptSig. Como não precisam destravar nada de fato, costumam usar esse campo para a sua própria "etiqueta" de minerador (para identificar quem minerou o bloco) ou, às vezes, para algum tipo de mensagem.
  • A recompensa do bloco pode ser enviada para vários lugares. Por exemplo, a transação coinbase do bloco 829.513 dividiu a recompensa do bloco em 17 saídas.

Exemplos

Como é uma transação coinbase?

Aqui estão alguns exemplos de transações coinbase típicas que você encontra na blockchain.

1. Básica

Altura: 0 a 227.835

Esta é a transação coinbase do bloco 150.007:

01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804233fa04e028b12ffffffff0130490b2a010000004341047eda6bd04fb27cab6e7c28c99b94977f073e912f25d1ff7165d9c95cd9bbe6da7e7ad7f2acb09e0ced91705f7616af53bee51a238b7dc527f2be0aa60469d140ac00000000
{
  "version": "01000000",
  "inputcount": "01",
  "inputs": [
    {
      "txid": "0000000000000000000000000000000000000000000000000000000000000000",
      "vout": "ffffffff",
      "scriptsigsize": "08",
      "scriptsig": "04233fa04e028b12",
      "sequence": "ffffffff"
    }
  ],
  "outputcount": "01",
  "outputs": [
    {
      "amount": "30490b2a01000000",
      "scriptpubkeysize": "43",
      "scriptpubkey": "41047eda6bd04fb27cab6e7c28c99b94977f073e912f25d1ff7165d9c95cd9bbe6da7e7ad7f2acb09e0ced91705f7616af53bee51a238b7dc527f2be0aa60469d140ac"
    }
  ],
  "locktime": "00000000"
}

Transação: 18a16d322b235f636ab90e62e79a9f20a0b9c14e8da51e9dc0974f99f82ee444

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.

O minerador é livre para colocar qualquer dado que quiser no ScriptSig (porque não há nada a destravar). Estes bytes não decodificam para nenhum texto ASCII em particular, então o minerador provavelmente estava só usando esse campo como um ExtraNonce (e não para armazenar uma etiqueta ou mensagem).

Há apenas uma saída, e ela tem um valor de 5000350000 sats:

Em seguida, travaram essa saída na sua própria chave pública usando um script de travamento P2PK (que é o script de travamento típico usado para transações coinbase no início da blockchain).

2. Altura na Coinbase

Altura: 227.836+ (BIP 34)

Esta é a transação coinbase do bloco 400.021:

01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1b03951a0604f15ccf5609013803062b9b5a0100072f425443432f200000000001ebc31495000000001976a9142c30a6aaac6d96687291475d7d52f4b469f665a688ac00000000
{
  "version": "01000000",
  "inputcount": "01",
  "inputs": [
    {
      "txid": "0000000000000000000000000000000000000000000000000000000000000000",
      "vout": "ffffffff",
      "scriptsigsize": "1b",
      "scriptsig": "03951a0604f15ccf5609013803062b9b5a0100072f425443432f20",
      "sequence": "00000000"
    }
  ],
  "outputcount": "01",
  "outputs": [
    {
      "amount": "ebc3149500000000",
      "scriptpubkeysize": "19",
      "scriptpubkey": "76a9142c30a6aaac6d96687291475d7d52f4b469f665a688ac"
    }
  ],
  "locktime": "00000000"
}

Transação: 2844c6f512f5609705c90c1603e9258779a0fe5e200664b0c1a1abad33da637e

Mais uma vez, esta transação coinbase tem uma entrada em branco.

Além disso, devido à BIP 34, a partir da altura 227.836 os mineradores são obrigados a colocar a altura do bloco atual no início do ScriptSig. Este é o ScriptSig decodificado:

OP_PUSHBYTES_3
951a06
OP_PUSHBYTES_4
f15ccf56
OP_PUSHBYTES_9
013803062b9b5a0100
OP_PUSHBYTES_7
2f425443432f20
03951a0604f15ccf5609013803062b9b5a0100072f425443432f20
Ícone Ferramenta Script

Script

Decodifique e codifique um script.

0 bytes

Esse ScriptSig contém quatro pushes de dados separados:

  1. 951a06 – É a altura do bloco atual em ordem de bytes little-endian. Convertendo para big-endian temos 061a95 e, convertendo de hexadecimal para decimal, obtemos 400021.
    Ícone Ferramenta Little Endian

    Little Endian

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

    0d
    0x
    0 bytes
    0x
    0 bytes
    Tamanho do Campo
  2. f15ccf56 – Desconhecido. Estes bytes não decodificam para nenhum texto ASCII específico, então pode ter sido um ExtraNonce.
  3. 013803062b9b5a0100 – Desconhecido. Estes bytes não decodificam para nenhum texto ASCII específico, então pode ter sido um ExtraNonce.
  4. 2f425443432f20 – São os bytes codificados em ASCII do texto "/BTCC/", que é a etiqueta do minerador.
    Ícone Ferramenta ASCII

    ASCII

    Converta entre bytes (em hexadecimal) e caracteres ASCII.

    0 bytes
    Bytes
    0 caracteres
    • Os bytes hex entre 0x20 e 0x7f contêm os caracteres imprimíveis.
    • Qualquer valor 0x1f ou abaixo é um caractere de controle (não será exibido, ou exibirá um caractere estranho).
    • Qualquer valor 0x80 ou acima não exibirá nada.

    Veja o padrão de codificação ISO 646 para detalhes.

Apenas o primeiro push de dados, com a altura do bloco atual, era obrigatório. Depois disso, o minerador era livre para incluir qualquer dado que quisesse no ScriptSig.

Há também apenas uma saída, com um valor de 2501166059 sats:

Esta saída foi então travada usando um script de travamento P2PKH.

Então, a única mudança real entre esta transação coinbase e uma básica é a altura no início do ScriptSig.

A razão de incluir a altura na transação coinbase é evitar TXIDs duplicados.

3. SegWit

Altura: 481.824+ (BIP 141)

Esta é a transação coinbase do bloco 538.403:

010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2503233708184d696e656420627920416e74506f6f6c373946205b8160a4256c0000946e0100ffffffff02f595814a000000001976a914edf10a7fac6b32e24daa5305c723f3de58db1bc888ac0000000000000000266a24aa21a9edfaa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db0120000000000000000000000000000000000000000000000000000000000000000000000000
{
  "version": "01000000",
  "marker": "00",
  "flag": "01",
  "inputcount": "01",
  "inputs": [
    {
      "txid": "0000000000000000000000000000000000000000000000000000000000000000",
      "vout": "ffffffff",
      "scriptsigsize": "25",
      "scriptsig": "03233708184d696e656420627920416e74506f6f6c373946205b8160a4256c0000946e0100",
      "sequence": "ffffffff"
    }
  ],
  "outputcount": "02",
  "outputs": [
    {
      "amount": "f595814a00000000",
      "scriptpubkeysize": "19",
      "scriptpubkey": "76a914edf10a7fac6b32e24daa5305c723f3de58db1bc888ac"
    },
    {
      "amount": "0000000000000000",
      "scriptpubkeysize": "26",
      "scriptpubkey": "6a24aa21a9edfaa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db"
    }
  ],
  "witness": [
    {
      "stackitems": "01",
      "0": {
        "size": "20",
        "item": "0000000000000000000000000000000000000000000000000000000000000000"
      }
    }
  ],
  "locktime": "00000000"
}

Transação: 31e9370f45eb48f6f52ef683b0737332f09f1cead75608021185450422ec1a71

Novamente, esta transação coinbase contém uma entrada em branco.

Este é o ScriptSig decodificado dessa entrada:

OP_PUSHBYTES_3
233708
OP_PUSHBYTES_24
4d696e656420627920416e74506f6f6c373946205b8160a4
OP_PUSHBYTES_37
6c0000946e0100
03233708184d696e656420627920416e74506f6f6c373946205b8160a4256c0000946e0100

Esse ScriptSig contém três pushes de dados separados:

  1. 233708 – Contém a altura do bloco 538403 em ordem de bytes little-endian.
  2. 4d696e656420627920416e74506f6f6c373946205b8160a4 – Contém a string ASCII "Mined by AntPool79F [`".
  3. 6c0000946e0100 – Provavelmente era um ExtraNonce.
Ícone Ferramenta Little Endian

Little Endian

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

0d
0x
0 bytes
0x
0 bytes
Tamanho do Campo
Ícone Ferramenta ASCII

ASCII

Converta entre bytes (em hexadecimal) e caracteres ASCII.

0 bytes
Bytes
0 caracteres
  • Os bytes hex entre 0x20 e 0x7f contêm os caracteres imprimíveis.
  • Qualquer valor 0x1f ou abaixo é um caractere de controle (não será exibido, ou exibirá um caractere estranho).
  • Qualquer valor 0x80 ou acima não exibirá nada.

Veja o padrão de codificação ISO 646 para detalhes.

A testemunha (witness) desta entrada contém o valor reservado de testemunha obrigatório de 32 bytes. Ele era todo zeros, pois não foi usado para comprometer nenhum dado extra ao bloco:

0000000000000000000000000000000000000000000000000000000000000000

Esta transação coinbase contém, então, duas saídas:

A primeira saída foi usada para reivindicar a recompensa do bloco de 1250006517 sats.

A segunda saída foi usada para o compromisso de wTXID obrigatório. Para calculá-lo, você começa reunindo todos os wTXIDs das transações incluídas no bloco:

0000000000000000000000000000000000000000000000000000000000000000
6440ffe0a58cbec4692d075bc74877cdf7554a25eee5a02fa6ff3bb55dbb0802
9e4fa066c9587e65845065a6b5ad02cbec6cfdad8b0158953dcee086ff420ffd
57661a181f4762861fc2bc5c6001c27b54e26992e845b4742a6f0f867609b2c2

A raiz da testemunha (a raiz de Merkle de todos os wTXIDs) deste bloco era, portanto:

8a8cc0634b8847eb38e7e884970deda26c2dfeefd923c4eba08ca11d110bb6e3
Ícone Ferramenta Raiz de Merkle

Merkle Root

Calcule a raiz de Merkle a partir de uma lista de TXIDs.

Bloco

Uma lista de TXIDs separados por espaços, vírgulas ou novas linhas. Aspas e colchetes são ignorados.

Os TXIDs devem ser inseridos na ordem de byte invertida (como aparecem nos exploradores), mas são convertidos para a ordem de byte natural antes de calcular a raiz de Merkle.

TXIDs (0)

A ordem dos bytes como sai da função de hash

A ordem dos bytes como mostrada nos exploradores

Ao calcular a raiz da testemunha, o wTXID da transação coinbase precisa ser definido como todo zeros para evitar uma referência circular.

Se você concatenar e fizer o HASH256 da raiz da testemunha com o valor reservado de testemunha, obtém o compromisso de wTXID:

faa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db
Ícone Ferramenta HASH256

HASH256

SHA-256 dupla. Usada para fazer o hash de cabeçalhos de bloco, dados de transação e de praticamente qualquer coisa que precise ser hasheada no Bitcoin.

0 bytes
SHA-256
SHA-256

SHA-256(SHA-256(dados))

0 bytes

Isso foi então colocado no ScriptPubKey da segunda saída:

OP_RETURN
OP_PUSHBYTES_36
aa21a9edfaa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db
6a24aa21a9edfaa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db

Se olhar com atenção, verá que o compromisso de wTXID está no fim do push de dados. Ele é prefixado com o cabeçalho de compromisso aa21a9ed para que saibamos que esse ScriptPubKey contém o compromisso de wTXID.

Esse ScriptPubKey também começa com OP_RETURN, o que significa que essa saída é não gastável — mas tudo bem, pois ela não contém nenhum satoshi e serve apenas para o compromisso de wTXID.

Então, basicamente, todas as transações coinbase desde a atualização segwit precisam incluir um valor reservado de testemunha no campo witness da entrada e, então, usá-lo junto com uma raiz da testemunha para colocar um compromisso de wTXID no ScriptPubKey de uma das saídas da transação.

Tudo isso é só parte de comprometer ao bloco os dados extras das transações segwit.

Se o bloco não contém nenhuma transação segwit, a coinbase não precisa incluir o valor reservado de testemunha no witness nem colocar um compromisso de wTXID em uma das saídas. O bloco 526.637 é um exemplo.

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 da blockchain o bloco que incluía aquela transação coinbase, então essa transação e todos os seus descendentes se tornariam inválidos.

Diagrama mostrando transações se tornando inválidas porque a transação coinbase foi removida da cadeia mais longa devido a uma reorganização da cadeia.

Isso é ruim, porque todas essas transações-filhas dependem daquela única transação coinbase.

Se aquela transação coinbase for removida da blockchain, não há como essa mesma transação coinbase reentrar na blockchain depois (porque ela contém a altura, e mudar a altura mudaria o seu TXID). Portanto, todas essas transações-filhas se tornam permanentemente inválidas, o que seria irritante.

Então, esperando 100 blocos, você pode ter confiança de que a transação coinbase está cravada, e é quase impossível que uma transação coinbase seja removida da blockchain depois de estar 100 blocos de profundidade (reorganizações da cadeia normalmente têm só 1 ou 2 blocos de profundidade).

Diagrama mostrando transações evitando se tornar inválidas por uma reorganização da cadeia, pois a transação coinbase está 101 blocos de profundidade na cadeia mais longa.

A configuração de maturidade da coinbase pode ser encontrada em consensus.h.

A transação coinbase poderia ser removida após 100 blocos por causa de um ataque de 51%. No entanto, a regra dos 100 blocos de maturidade da coinbase serve apenas para proteger dos problemas causados por reorganizações típicas da cadeia.

Exemplo

A transação coinbase do bloco 400.000 foi gasta na primeira oportunidade, no bloco 400.101:

Notas

Recursos