**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)
105 lines
3.7 KiB
Markdown
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
|