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.

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. f15ccf56Desconhecido. Estes bytes não decodificam para nenhum texto ASCII específico, então pode ter sido um ExtraNonce.
  3. 013803062b9b5a0100Desconhecido. 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