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

79 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 :
```bash
# 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.