anchorage_layer_simple/fixKnowledge/bloc-rewards-amount-not-50-btc.md
ncantu cc054c8904 Revert 50 BTC display hack, document Bloc Rewards amount analysis
**Motivations:**
- Comprendre pourquoi Bloc Rewards affichent 4700, 4250... au lieu de 50 BTC
- Ne pas masquer l'écart par un affichage forcé 50 🛡

**Root causes:**
- Montants = listunspent (RPC) → fichier → UI ; aucune transformation
- Si ≠ 50 BTC, cause en amont : subsidy signet custom ou bug nœud/config

**Correctifs:**
- Revert affichage "50 🛡 (n 🛡 avec frais)" pour Bloc Rewards
- Doc fixKnowledge/bloc-rewards-amount-not-50-btc.md : chaîne de données,
  protocole 50 BTC, causes possibles, commandes de diagnostic

**Evolutions:**
- Aucune

**Pages affectées:**
- signet-dashboard/public/utxo-list.html
- fixKnowledge/bloc-rewards-amount-not-50-btc.md
2026-01-26 01:52:22 +01:00

4.1 KiB
Raw Blame History

Bloc Rewards : montants affichés ≠ 50 BTC (4 premières années)

Auteur : Équipe 4NK
Date : 2026-01-26
Version : 1.0

Problème

En UTXO-list, section Bloc Rewards (Récompenses de minage) :

  • Attendu : 50 🛡 par bloc (récompense de base des 4 premières années, protocole Bitcoin).
  • Observé : 4 700 🛡, 4 250 🛡, 4 100 🛡, etc. (ex. utxo_list.txt).

Chaîne de données (origine des montants)

  1. RPC : listunspent (Bitcoin Core) retourne pour chaque UTXO un champ amount en BTC.
  2. bitcoin-rpc.js : on récupère utxo.amount, on catégorise les coinbase en bloc_rewards, on écrit en fichier item.amount.
  3. Fichier : utxo_list.txt, format category;txid;vout;amount;confirmations;.... Le montant écrit = valeur RPC.
  4. utxo-list.html : en chargement fichier, on parse amount et on affiche Math.round(utxo.amount) 🛡.

Donc on affiche strictement ce que le nœud fournit via listunspent. Aucune transformation (sats→BTC, somme, etc.) côté dashboard.

Récompense de bloc côté protocole

  • Coinbase : 1 output = subsidy (récompense de base) + frais des transactions du bloc.
  • 4 premières années (blocs 0209 999) : subsidy = 50 BTC (mainnet / signet standard).
  • Les frais sont en général bien plus petits que 50 BTC.

Si on voit 4 700 BTC par bloc, ce nest pas « 50 + frais » dans un cadre standard.

Causes possibles

  1. Subsidy custom (signet)
    Le signet peut utiliser des paramètres de chaîne différents (ex. autre courbe de subsidy). La récompense de bloc est définie dans les chain params du nœud, pas dans le miner.

  2. Miner / getblocktemplate
    Le miner utilise getblocktemplate. La coinbase est construite par le nœud. La valeur de loutput coinbase (donc ce que listunspent voit) vient du nœud, pas du script miner ou de blocktools.create_coinbase.

  3. Bug en amont
    Moins probable, mais possible : bug ou config spéciale du nœud / du wallet (autre unité, autre agrégation).

Comment vérifier (diagnostic)

À lancer sur la machine où tourne le nœud / le wallet utilisé par le dashboard :

# 1. Montants listunspent (ex. wallet custom_signet)
bitcoin-cli -rpcwallet=custom_signet listunspent 1 | jq '.[] | select(.txid) | {txid, vout, amount, confirmations}'

# 2. Détail dune coinbase particulière (ex. premier bloc rewards du fichier)
TXID="d7696ca795fe16dfa8516f5267d476c755a8f2bdb93f5ff0dc14a2599c070cce"
bitcoin-cli getrawtransaction "$TXID" 1 | jq '{txid, vout: [.vout[] | {n, value}], blockhash, blockheight}'
  • Comparer amount (listunspent) et vout[].value (getrawtransaction) aux montants affichés dans lUI et dans utxo_list.txt.
  • Vérifier blockheight : si height < 210 000, la subsidy standard est 50 BTC.

Ensuite, côté nœud :

  • Config signet (fichier conf, signetchallenge, etc.).
  • Si possible, source des chain params (subsidy, halving) pour ce signet custom (ex. fork Easepay ou autre).

Actions recommandées

  1. Ne pas forcer laffichage à « 50 🛡 » : on affiche la donnée brute pour garder le problème visible et traçable.
  2. Identifier la source :
    • soit subsidy custom du signet → documenter la règle (ex. « X BTC par bloc pour ce signet ») et adapter laffichage / les explications si besoin ;
    • soit anomalie (config, bug) → corriger côté nœud / chain params.
  3. Documenter : une fois la règle connue, mettre à jour ce doc (et éventuellement lUI) pour indiquer la récompense de bloc réelle pour ce signet.

Pages / composants affectés

  • signet-dashboard/src/bitcoin-rpc.js : lecture utxo.amount (listunspent), écriture fichier.
  • signet-dashboard/public/utxo-list.html : affichage Math.round(utxo.amount) pour Bloc Rewards.
  • utxo_list.txt : reflet des montants RPC.

Références

  • Bitcoin Core RPC : listunspent (amount en BTC), getrawtransaction (vout[].value).
  • miner_imports/test_framework/blocktools.py : create_coinbase(height, nValue=50) — utilisé par les tests, pas par le miner en production pour ce signet ; la coinbase réelle vient du nœud.