Coinbase est un type de transaction consensuelle, et non une société Coinbase ou un paiement régulier. Avec le bloc, le nœud vérifie le point de sortie zéro, la hauteur selon BIP34, le plafond de récompense, la position zéro, la maturité et l'éventuel engagement SegWit. Il n’est pas accepté séparément dans le pool de mémoire.
Un bloc doit contenir au moins une transaction et coinbase ne peut être que la première. Bitcoin Core le reconnaît par sa structure exacte : une seule entrée avec 32 zéro octets dans le hachage de la sortie précédente et un index de 0xffffffff. L'entrée ne déverrouille pas un UTXO existant, elle n'a donc pas de signature régulière ni de valeur de pré-autorisation. Une transaction peut toujours avoir plusieurs sorties, une version standard ainsi qu'un locktime et un txid personnalisé. [Référence du développeur Bitcoin — Entrée Coinbase] [Référence du développeur Bitcoin — Chaîne de blocs] [Bitcoin Core — transaction.h (IsCoinBase)]
La somme des sorties de Coinbase ne peut pas dépasser GetBlockSubsidy pour ce montant plus les frais de toutes les autres transactions valides dans le bloc. Seul le composant de récompense nouvellement émis crée un nouveau satoshi ; les frais convertissent les satoshi préexistants. Un mineur peut réclamer moins et la différence disparaît à jamais, mais un seul satoshi dépassant la limite invalide le bloc entier. Le consensus ne détermine pas la répartition entre un pool, des mineurs ou plusieurs scripts. [Bitcoin Core — validation.cpp] [Bitcoin Core — miner.cpp]
Depuis BIP34, scriptSig coinbase doit commencer par la hauteur de bloc actuelle sous la forme d'un numéro CScript codé de manière minimale. L'intégralité du scriptSig fait entre 2 et 100 octets. Le reste peut contenir un nom occasionnel supplémentaire, une balise de pool ou un engagement de minage fusionné, mais cela n'est pas en dehors des règles : une hauteur ou une longueur incorrecte invalidera le bloc, et les opcodes de signature intégrés peuvent consommer la limite sigop. [Référence du développeur Bitcoin — Entrée Coinbase] [BIP 34 — Hauteur du bloc dans Coinbase]
L'ASIC modifie le nom occasionnel dans l'en-tête, mais l'espace 32 bits s'épuise rapidement. Le logiciel de minage transforme donc le nonce supplémentaire en coinbase ; cela changera son txid, la transaction racine Merkle et par la suite l'en-tête du bloc, afin qu'il obtienne un nouvel espace de hachage. Les protocoles de pool divisent cet espace entre les travailleurs afin que leurs actions n'entrent pas en collision. Le nonce supplémentaire est un élément de coordination, pas une émission supplémentaire. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate] [Stratum V2 — Spécification du protocole minier]
Les sorties Coinbase utilisent des scripts de verrouillage courants et peuvent être réparties entre plusieurs adresses ou politiques. Le pool peut payer à une adresse de collecte, partager les revenus immédiatement ou réserver la sortie à l'opérateur. Cependant, le nœud vérifie les montants et les scripts, et non les contrats ou les propriétaires réels. Les seuils de paiement, PPS, FPPS, PPLNS et les retraits ultérieurs sont des règles de pool non protocolaires. [Bitcoin Core – miner.cpp] [BIP 22 – getblocktemplate]
Si le bloc contient une transaction témoin, BIP141 nécessite un engagement témoin coinbase dans une sortie : OP_RETURN commençant par 6a24aa21a9ed et un engagement de 32 octets. Le témoin d'entrée coinbase contient une seule valeur réservée de 32 octets. S’il y a plus de résultats correspondants, le consensus prend l’indice le plus élevé. Cette sortie lie la racine Merkle témoin ; pas une récompense pour les mineurs. [BIP 141 — Engagement des témoins séparés]
La sortie de Coinbase est marquée d'un drapeau spécial dans l'ensemble UTXO et ne peut être dépensée que lorsque la différence de hauteur des blocs de dépense et de création atteint COINBASE_MATURITY, aujourd'hui 100. Par conséquent, la récompense de la hauteur H peut être dépensée pour la première fois dans le bloc H+100. Le portefeuille peut afficher une différence apparente d'une confirmation car le bloc générateur compte en premier. La maturité n'est pas la finalité. [Bitcoin Core – consensus.h (COINBASE_MATURITY)]
Si un bloc extrait sort de la chaîne active avec le plus de travail lors de la réorganisation, ses sorties coinbase disparaîtront de l'ensemble UTXO actif. Les transactions ultérieures qui ont déjà dépensé la récompense mature peuvent également être invalides. Un délai de 100 blocs limite les dégâts des réorganisations courtes, mais ne garantit pas l'immuabilité. Un pool doit surveiller séparément la chaîne active, la maturité et ses engagements envers les mineurs. [Bitcoin Core — validation.cpp] [Bitcoin Core — consensus.h (COINBASE_MATURITY)]
Le nœud complet nécessite Coinbase à la position zéro lors de la validation, rejette Coinbase supplémentaire, vérifie la longueur du scriptSig et la hauteur BIP34, calcule les frais des autres transactions et rejette la récompense supérieure à la nouvelle émission plus les frais. Il vérifie également les fourchettes de valeur, le poids, l'engagement des témoins et l'échéance ultérieure des dépenses. Une coinbase distincte sans hauteur ni contexte de bloc n'appartient pas au pool de mémoire. [Bitcoin Core — transaction.h (IsCoinBase)] [Bitcoin Core — validation.cpp] [BIP 141 — Engagement de témoin séparé]
Dans les premiers blocs, la même coinbase txid pouvait être créée car la hauteur n'était pas encore obligatoire. BIP30 empêche l'écrasement du résultat non dépensé d'une ancienne transaction, et BIP34 donne aux pièces de monnaie modernes une hauteur généralement unique. Genesis est une exception historique : sa base de données est dans un bloc sérialisé, mais le code d'initialisation n'a jamais mis sa sortie dans la base de données UTXO consommable. Les fameux 50 BTC ne peuvent donc pas être dépensés. [BIP 30 — Transactions en double] [BIP 34 — Hauteur du bloc dans coinbase] [Bitcoin Core — chainparams.cpp (construction Genesis)]
Pour une vision complète, lisez aussi Bloc, Récompense de création monétaire, Frais de transaction, Minage, Block Template, Bitcoin. Cette entrée est également citée par Récompense de création monétaire, Confirmation, Reorg, Stale Block.