Calendrier des récompenses - Où se trouve le code source du bitcoin et le plafond de 21 millions est-il indiqué ?

Où se trouve le code source du Bitcoin et le plafond de 21 millions indiqué ?

Nulle part, car il n’existe pas réellement de règle de plafond de 21 millions.

Le code pertinent est le suivant :

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams) { int halvings = nHeight / consensusParams.nSubsidyHalvingInterval; // Force la récompense du bloc à zéro lorsque le décalage à droite n'est pas défini. if (diminutions de moitié >= 64) renvoie 0 ; CAmontant nSubvention = 50 * COIN ; // La subvention est réduite de moitié tous les 210 000 blocs, ce qui se produira environ tous les 4 ans. nSubvention >>= réduction de moitié ; retourner nSubvention ; } // consensusParams.nSubsidyHalvingInterval = 210000.

Il calcule la subvention maximale qu'un mineur peut réclamer pour une hauteur de bloc donnée, et cette fonction contrôle efficacement le calendrier d'inflation de Bitcoin. La limite souvent évoquée de « 21 millions » n’est que le résultat approximatif de la somme de toutes les pièces que cette fonction permet de mettre en circulation, au cours du temps.

En bref, le code implémente ce qui suit :

  • Les 210 000 premiers blocs (environ 4 ans) autorisent jusqu'à 50 BTC de subvention chacun
  • Puis 210 000 blocs de 25 BTC chacun
  • Puis 210 000 blocs de 12,5 BTC chacun
  • .
  • Après 10 moitiés, la subvention devient 0,04882812 BTC au lieu de 0,048828125 (ce qui nécessiterait une précision d'un demi-satoshi, et le code utilise une division entière qui arrondit à l'inférieur)
  • Après 33 moitiés, la subvention devient nulle

Si l’on additionne toutes les valeurs de subvention sur toutes les moitiés, le résultat est 20999999,9769 BTC, et non 21 000 000 BTC. Cependant, en raison de divers détails, ce n'est pas non plus la véritable limite ; cette réponse entre plus en détail.

Désormais, le code contient également cette constante :

/** Aucun montant supérieur à cela (en satoshi) n'est valable. * * Notez que cette constante n'est *pas* la masse monétaire totale, qui dans Bitcoin * se trouve actuellement inférieure à 21 000 000 BTC pour diverses raisons, mais * plutôt un contrôle de santé mentale. Comme ce contrôle de cohérence est utilisé par le code de validation critique par consensus *, la valeur exacte de la constante MAX_MONEY est critique par consensus * ; dans des circonstances inhabituelles, comme un (autre) bug de débordement qui permettait * la création de pièces à partir de rien, la modification pourrait conduire à un fork. * */ constexpr statique CAmount MAX_MONEY = 21000000 * COIN;

qui, comme l'explique le commentaire, ne contrôle pas réellement l'offre totale (car c'est plutôt le résultat de la somme de toutes les subventions), mais est utilisé comme contrôle de bon sens dans de nombreux endroits.