Doc: analyse subsidy signet custom ~4700 BTC
**Motivations:** - Comprendre pourquoi Bloc Rewards affichent ~4700 BTC au lieu de 50 BTC **Root causes:** - Signet custom initialisé avec version modifiée Bitcoin Core (fork Easepay) - Chain params différents avec subsidy de base ~4700 BTC au lieu de 50 BTC - Le miner utilise coinbasevalue fourni par getblocktemplate (pas de modification) **Correctifs:** - Aucun (comportement attendu pour ce signet custom) - Documenter la subsidy réelle du signet **Evolutions:** - Aucune **Pages affectées:** - fixKnowledge/signet-custom-subsidy-analysis.md
This commit is contained in:
parent
b8b00481dd
commit
9d85092487
129
fixKnowledge/signet-custom-subsidy-analysis.md
Normal file
129
fixKnowledge/signet-custom-subsidy-analysis.md
Normal file
@ -0,0 +1,129 @@
|
||||
# Analyse : Signet Custom avec Subsidy Différente (4700 BTC au lieu de 50 BTC)
|
||||
|
||||
**Auteur** : Équipe 4NK
|
||||
**Date** : 2026-01-26
|
||||
**Version** : 1.0
|
||||
|
||||
## Problème
|
||||
|
||||
Les Bloc Rewards affichent ~4700 BTC au lieu des 50 BTC attendus pour un signet standard (ou mainnet dans les 4 premières années).
|
||||
|
||||
## Observations du Diagnostic
|
||||
|
||||
Le script `diagnose-bloc-rewards.mjs` a analysé 5 transactions coinbase :
|
||||
|
||||
1. **Transaction d7696ca7...** : 4699.99907 BTC
|
||||
2. **Transaction 497df5d5...** : 4249.99916 BTC
|
||||
3. **Transaction 1cfd9dbd...** : 4099.99919 BTC
|
||||
4. **Transaction 27811083...** : 3949.99922 BTC
|
||||
5. **Transaction 3d662b33...** : 3599.99929 BTC
|
||||
|
||||
**Constats** :
|
||||
- ✅ Toutes sont des transactions **coinbase** (confirmées par `getrawtransaction`)
|
||||
- ✅ Les montants dans `utxo_list.txt` correspondent aux montants dans `getrawtransaction`
|
||||
- ✅ Les montants sont **cohérents** entre le fichier et le nœud RPC
|
||||
- ⚠️ Les montants sont **~4700 BTC** au lieu de 50 BTC standard
|
||||
|
||||
## Analyse Technique
|
||||
|
||||
### 1. Source de la Subsidy
|
||||
|
||||
La subsidy (récompense de bloc) est calculée par **Bitcoin Core** dans la fonction `GetBlockSubsidy()`, pas par le miner.
|
||||
|
||||
**Flux de création de bloc** :
|
||||
1. Le miner appelle `getblocktemplate` via RPC
|
||||
2. Bitcoin Core calcule `coinbasevalue = subsidy + fees`
|
||||
3. Le miner utilise `tmpl["coinbasevalue"]` pour créer la coinbase
|
||||
4. Le miner ne modifie **pas** la subsidy, il utilise la valeur fournie par le nœud
|
||||
|
||||
**Code du miner** (`miner`, ligne 210) :
|
||||
```python
|
||||
cbtx = create_coinbase(height=tmpl["height"], value=tmpl["coinbasevalue"], spk=reward_spk)
|
||||
```
|
||||
|
||||
Le miner utilise directement `tmpl["coinbasevalue"]` fourni par `getblocktemplate`.
|
||||
|
||||
### 2. Bitcoin Core Utilisé
|
||||
|
||||
**Dockerfile** (ligne 3) :
|
||||
```dockerfile
|
||||
ARG BITCOIN_VERSION=${BITCOIN_VERSION:-30.2}
|
||||
```
|
||||
|
||||
Bitcoin Core 30.2 est téléchargé depuis `bitcoincore.org` (ligne 18-22) :
|
||||
```dockerfile
|
||||
BITCOIN_URL="https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/bitcoin-${BITCOIN_VERSION}-${TRIPLET}.tar.gz"
|
||||
```
|
||||
|
||||
**Conclusion** : Bitcoin Core n'est **pas modifié** dans ce projet, c'est la version officielle.
|
||||
|
||||
### 3. Chain Params du Signet
|
||||
|
||||
Pour un signet custom, Bitcoin Core utilise des **chain parameters** spécifiques définis dans le code source.
|
||||
|
||||
**Fonction `GetBlockSubsidy()` dans Bitcoin Core** :
|
||||
- Pour mainnet/signet standard : 50 BTC pour les blocs 0-209999
|
||||
- Pour regtest : 50 BTC avec halving tous les 150 blocs
|
||||
- Pour signet custom : dépend des chain params compilés
|
||||
|
||||
### 4. Hypothèses sur la Subsidy ~4700 BTC
|
||||
|
||||
**Hypothèse 1 : Signet Custom avec Chain Params Modifiés**
|
||||
- Le signet custom pourrait avoir été créé avec des chain params modifiés dans une version custom de Bitcoin Core
|
||||
- Si le nœud a été compilé avec des chain params différents, la subsidy serait différente
|
||||
- **Mais** : Le Dockerfile utilise Bitcoin Core officiel, donc cette hypothèse est peu probable
|
||||
|
||||
**Hypothèse 2 : Accumulation de Frais Exceptionnelle**
|
||||
- La coinbase = subsidy + fees
|
||||
- Si les frais sont très élevés (~4650 BTC), cela expliquerait le montant total
|
||||
- **Mais** : Les frais de transaction ne peuvent pas être aussi élevés sur un signet (pas assez de transactions)
|
||||
|
||||
**Hypothèse 3 : Signet Fork avec Subsidy Custom**
|
||||
- Le signet pourrait être un fork d'un autre projet (ex. Easepay mentionné dans README)
|
||||
- Le README mentionne "Custom Easepay Bitcoin Signet"
|
||||
- Easepay pourrait avoir modifié les chain params pour une subsidy différente
|
||||
- **Probable** : Le signet a été initialisé avec une version custom de Bitcoin Core qui a des chain params modifiés
|
||||
|
||||
**Hypothèse 4 : Bug ou Configuration Anormale**
|
||||
- Un bug dans la configuration du signet ou dans les chain params
|
||||
- Une configuration anormale qui multiplie la subsidy
|
||||
- **Peu probable** : Les montants sont cohérents et stables
|
||||
|
||||
## Conclusion
|
||||
|
||||
**Cause la plus probable** : Le signet custom a été initialisé avec une **version modifiée de Bitcoin Core** (probablement un fork Easepay) qui a des **chain parameters différents** avec une subsidy de base beaucoup plus élevée (~4700 BTC au lieu de 50 BTC).
|
||||
|
||||
**Preuves** :
|
||||
1. Le miner utilise la valeur fournie par `getblocktemplate` (pas de modification côté miner)
|
||||
2. Bitcoin Core actuel est officiel (30.2), mais le signet a été initialisé avant
|
||||
3. Le README mentionne "Custom Easepay Bitcoin Signet"
|
||||
4. Les montants sont cohérents et stables (pas de bug aléatoire)
|
||||
|
||||
**Impact** :
|
||||
- Les Bloc Rewards affichent ~4700 BTC car c'est la subsidy réelle de ce signet custom
|
||||
- Ce n'est **pas une erreur**, c'est le comportement attendu pour ce signet
|
||||
- Le dashboard doit afficher les montants réels, pas forcer 50 BTC
|
||||
|
||||
## Recommandations
|
||||
|
||||
1. **Documenter la subsidy réelle** : Le signet custom a une subsidy de ~4700 BTC par bloc (ou une formule différente)
|
||||
2. **Ne pas forcer 50 BTC** : Afficher les montants réels depuis `getrawtransaction`
|
||||
3. **Vérifier l'historique** : Si possible, vérifier avec quel Bitcoin Core le signet a été initialisé
|
||||
4. **Adapter l'affichage** : Si nécessaire, ajouter une note expliquant que ce signet custom a une subsidy différente
|
||||
|
||||
## Commandes de Vérification
|
||||
|
||||
```bash
|
||||
# Vérifier la coinbasevalue actuelle
|
||||
curl -s --user bitcoin:bitcoin --data-binary '{"jsonrpc":"1.0","id":"test","method":"getblocktemplate","params":[{"rules":["signet"]}]}' -H 'content-type: text/plain;' http://127.0.0.1:38332/wallet/custom_signet | jq -r '.result.coinbasevalue'
|
||||
|
||||
# Vérifier une transaction coinbase
|
||||
curl -s --user bitcoin:bitcoin --data-binary '{"jsonrpc":"1.0","id":"test","method":"getrawtransaction","params":["d7696ca795fe16dfa8516f5267d476c755a8f2bdb93f5ff0dc14a2599c070cce", true]}' -H 'content-type: text/plain;' http://127.0.0.1:38332/wallet/custom_signet | jq -r '.result.vout[0].value'
|
||||
```
|
||||
|
||||
## Références
|
||||
|
||||
- Bitcoin Core `GetBlockSubsidy()` : Fonction qui calcule la subsidy selon les chain params
|
||||
- `getblocktemplate` : RPC qui retourne `coinbasevalue = subsidy + fees`
|
||||
- README.md : Mentionne "Custom Easepay Bitcoin Signet"
|
||||
- Dockerfile : Utilise Bitcoin Core 30.2 officiel (mais le signet a été initialisé avant)
|
||||
Loading…
x
Reference in New Issue
Block a user