anchorage_layer_simple/docs/SOLUTION_MINING.md
ncantu 20d115a31c feat: Add APIs, dashboard, documentation and improve scripts
**Motivations:**
- Add API services for anchorage and faucet functionality
- Add dashboard interface for signet monitoring
- Improve documentation and maintenance guides
- Enhance existing scripts for better functionality

**Root causes:**
- Need for API services to interact with Bitcoin Signet
- Need for user-friendly dashboard interface
- Need for comprehensive documentation
- Scripts required improvements for better reliability

**Correctifs:**
- Updated Dockerfile with better configuration
- Improved gen-bitcoind-conf.sh and gen-signet-keys.sh scripts
- Enhanced mine.sh, miner, run.sh, and setup-signet.sh scripts
- Updated env.example with new configuration options

**Evolutions:**
- Added api-anchorage service with anchor functionality
- Added api-faucet service for testnet coin distribution
- Added signet-dashboard for monitoring and management
- Added comprehensive documentation in docs/ directory
- Added configure-nginx-proxy.sh for proxy configuration
- Added update-signet.sh for signet updates
- Added ETAT_SYSTEME.md and START_DASHBOARD_AND_FAUCET.md guides
- Added .bitcoin-version file for version tracking

**Pages affectées:**
- Dockerfile
- env.example
- gen-bitcoind-conf.sh
- gen-signet-keys.sh
- mine.sh
- miner
- run.sh
- setup-signet.sh
- api-anchorage/ (new)
- api-faucet/ (new)
- signet-dashboard/ (new)
- docs/ (new)
- configure-nginx-proxy.sh (new)
- update-signet.sh (new)
- ETAT_SYSTEME.md (new)
- START_DASHBOARD_AND_FAUCET.md (new)
- .bitcoin-version (new)
- .env (modified)
- mempool/ (added)
2026-01-24 02:40:25 +01:00

105 lines
3.7 KiB
Markdown

# Solution au Problème de Mining Signet - Bitcoin Core 30.2
**Auteur** : Équipe 4NK
**Date** : 2026-01-23
**Version** : 1.0
## Problème Résolu
Le mining Bitcoin Signet échouait avec "PSBT signing failed" sur Bitcoin Core 30.2 avec descriptor wallets.
## Cause Racine
Le problème venait de l'utilisation de `walletprocesspsbt` qui ne peut pas signer les PSBT signet contenant des transactions artificielles (`to_spend`/`spend`). Ces transactions ne sont pas des UTXOs réels dans le wallet, donc `walletprocesspsbt` ne peut pas les reconnaître et signer.
## Solution
**Remplacer `walletprocesspsbt` par `descriptorprocesspsbt`**
`descriptorprocesspsbt` est un RPC de nœud (pas wallet) qui signe directement avec des descriptors fournis, sans dépendre du wallet et de son modèle UTXO.
### Modifications Apportées
#### 1. Fichier `miner` (ligne ~476-521)
**Avant** :
```python
psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))
```
**Après** :
```python
# Use descriptorprocesspsbt by default (works with Bitcoin Core 30+ and descriptor wallets)
privkey = os.environ.get('PRIVKEY', '')
if not privkey and hasattr(args, 'privkey') and args.privkey:
privkey = args.privkey
if privkey:
descriptor = "pk(%s)" % privkey
descriptors_array = [descriptor]
psbt_signed = json.loads(args.bcli("descriptorprocesspsbt", psbt, json.dumps(descriptors_array), "ALL", "true", "true"))
else:
# Fallback to walletprocesspsbt
input_stream = os.linesep.join([psbt, "true", "ALL"]).encode('utf8')
psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))
```
#### 2. Fichier `mine.sh`
**Modification** : Export de PRIVKEY pour qu'il soit disponible dans l'environnement du miner
```bash
export PRIVKEY=${PRIVKEY:-$(cat ~/.bitcoin/PRIVKEY.txt 2>/dev/null || echo "")}
miner --cli="bitcoin-cli" generate ...
```
### Fonctionnement
1. Le miner génère un PSBT signet avec les transactions artificielles `to_spend`/`spend`
2. Au lieu d'utiliser `walletprocesspsbt`, il utilise `descriptorprocesspsbt`
3. `descriptorprocesspsbt` reçoit :
- Le PSBT (base64)
- Un array de descriptors : `["pk(PRIVKEY)"]`
- Les paramètres : `"ALL"`, `true`, `true` (sighashtype, bip32derivs, finalize)
4. Le PSBT est signé avec succès (`complete: true`)
5. Le bloc est miné et soumis
### Avantages
- ✅ Fonctionne avec Bitcoin Core 30+ et descriptor wallets
- ✅ Ne dépend pas du wallet pour reconnaître les UTXOs
- ✅ Signe directement avec le descriptor contenant la clé privée
- ✅ Compatible avec les transactions artificielles Signet
### Vérification
**Test manuel** :
```bash
PRIVKEY=$(grep PRIVKEY .env | cut -d'=' -f2)
PSBT=$(miner genpsbt ...)
bitcoin-cli -signet descriptorprocesspsbt "$PSBT" '["pk('$PRIVKEY')"]' "ALL" true true
# Résultat: {"psbt": "...", "complete": true, ...}
```
**Test automatique** :
```bash
sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getblockchaininfo | grep blocks
# Doit afficher blocks > 0 après quelques minutes
```
### Notes Techniques
- `descriptorprocesspsbt` est un RPC de nœud, pas de wallet
- Il accepte les descriptors avec clés privées WIF
- Il peut signer des PSBT avec des entrées qui ne sont pas dans le wallet
- Parfait pour les cas d'usage comme Signet où les transactions sont artificielles
### Références
- [Bitcoin Core descriptorprocesspsbt](https://bitcoincore.org/en/doc/28.0.0/rpc/rawtransactions/descriptorprocesspsbt/)
- [Bitcoin Core PSBT Documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/psbt.md)
- [GitHub Issue #28911](https://github.com/bitcoin/bitcoin/issues/28911)
---
**Dernière mise à jour** : 2026-01-23