**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)
153 lines
5.5 KiB
Markdown
153 lines
5.5 KiB
Markdown
# Prompt pour Recherche IA - Problème Mining Signet Bitcoin Core 30.2
|
|
|
|
**Contexte** : Problème de mining Bitcoin Signet avec Bitcoin Core 30.2 et descriptor wallets
|
|
|
|
---
|
|
|
|
## PROMPT COMPLET
|
|
|
|
Je rencontre un problème avec le mining Bitcoin Signet sur Bitcoin Core 30.2 utilisant des descriptor wallets. Le miner échoue systématiquement avec "PSBT signing failed" malgré une configuration apparemment correcte.
|
|
|
|
### Contexte Technique
|
|
|
|
**Environnement** :
|
|
- Bitcoin Core 30.2 (dernière version)
|
|
- Descriptor wallets (legacy wallets non supportés depuis Bitcoin Core 30+)
|
|
- Bitcoin Signet custom
|
|
- Docker container (Debian Bookworm)
|
|
- Script de mining Python basé sur `contrib/signet/miner.py` de Bitcoin Core
|
|
|
|
### Configuration Actuelle
|
|
|
|
**SIGNETCHALLENGE** : `5121028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a651ae`
|
|
- Format : `5121[PUBKEY]51ae` (script P2PK)
|
|
- Clé publique : `028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a6`
|
|
|
|
**PRIVKEY** : `cVCKcgQf2ewV5miairzhrHJCPv4kMbMMBZeJvW5SMhFMSWVtCvXS`
|
|
- Format WIF (Wallet Import Format)
|
|
- Dérive correctement vers la clé publique du SIGNETCHALLENGE ✅
|
|
|
|
**Wallet Descriptor** :
|
|
```json
|
|
{
|
|
"desc": "pk(028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a6)#vflt9jvv",
|
|
"timestamp": 1,
|
|
"active": false,
|
|
"has_private_keys": true,
|
|
"is_solvable": true
|
|
}
|
|
```
|
|
|
|
### Problème Observé
|
|
|
|
Le miner Bitcoin Signet utilise `walletprocesspsbt` pour signer des transactions spéciales vers le SIGNETCHALLENGE. Le processus échoue à chaque tentative :
|
|
|
|
**Logs** :
|
|
```
|
|
PSBT signing failed
|
|
Delay before next block 600 seconds.
|
|
```
|
|
|
|
**Code du miner** (ligne 476-482) :
|
|
```python
|
|
psbt = generate_psbt(tmpl, reward_spk, blocktime=mine_time)
|
|
input_stream = os.linesep.join([psbt, "true", "ALL"]).encode('utf8')
|
|
psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))
|
|
if not psbt_signed.get("complete",False):
|
|
logging.debug("Generated PSBT: %s" % (psbt,))
|
|
sys.stderr.write("PSBT signing failed\n")
|
|
return 1
|
|
```
|
|
|
|
### Structure du PSBT Signet
|
|
|
|
Le miner crée un PSBT spécial qui contient :
|
|
1. Une transaction `to_spend` vers le SIGNETCHALLENGE (script P2PK)
|
|
2. Une transaction `spend` qui dépense `to_spend`
|
|
3. Le bloc à miner dans un champ propriétaire PSBT (`PSBT_SIGNET_BLOCK`)
|
|
|
|
**Code de génération** (ligne 134-166) :
|
|
```python
|
|
def signet_txs(block, challenge):
|
|
# ... crée to_spend et spend transactions
|
|
to_spend.vout = [CTxOut(0, challenge)] # challenge est le SIGNETCHALLENGE (P2PK script)
|
|
return spend, to_spend
|
|
```
|
|
|
|
### Vérifications Effectuées
|
|
|
|
✅ **Compatibilité des clés** :
|
|
- La PRIVKEY dérive correctement vers la clé publique du SIGNETCHALLENGE
|
|
- Le descriptor `pk()` est importé dans le wallet
|
|
- `hasprivatekeys: true` et `issolvable: true`
|
|
|
|
✅ **Import du descriptor** :
|
|
- Utilisation de `importdescriptors` avec `pk($PRIVKEY)#$CHECKSUM`
|
|
- Le descriptor est présent dans le wallet (mais `active: false`)
|
|
|
|
❌ **Problème** :
|
|
- `walletprocesspsbt` retourne `complete: false`
|
|
- Le wallet ne peut pas signer le PSBT signet
|
|
|
|
### Tentatives de Résolution
|
|
|
|
1. **Import comme `pk()` au lieu de `wpkh()`** ✅
|
|
- Nécessaire car SIGNETCHALLENGE utilise P2PK, pas P2WPKH
|
|
- Le descriptor est importé avec succès
|
|
|
|
2. **Tentative d'activation du descriptor** ❌
|
|
- Erreur : "Active descriptors must be ranged"
|
|
- Les descriptors non-rangés ne peuvent pas être actifs
|
|
|
|
3. **Vérification de compatibilité** ✅
|
|
- Les clés sont compatibles
|
|
- Pas besoin de régénérer la chaîne
|
|
|
|
### Questions Spécifiques
|
|
|
|
1. **Bitcoin Core 30.2 et descriptor wallets** :
|
|
- Y a-t-il des limitations connues pour signer des transactions P2PK avec des descriptors `pk()` non-actifs ?
|
|
- Le wallet peut-il signer des transactions vers des scripts qui ne sont pas dans son UTXO set ?
|
|
|
|
2. **PSBT Signet et walletprocesspsbt** :
|
|
- `walletprocesspsbt` peut-il signer des PSBT spéciaux contenant des transactions virtuelles (comme `to_spend` dans signet) ?
|
|
- Y a-t-il des paramètres spécifiques nécessaires pour signer des PSBT signet ?
|
|
|
|
3. **Descriptor `pk()` non-actif** :
|
|
- Un descriptor `pk()` avec `active: false` peut-il être utilisé pour signer ?
|
|
- Faut-il importer la clé différemment pour le mining signet ?
|
|
|
|
4. **Alternatives** :
|
|
- Existe-t-il une autre méthode pour signer les blocs signet avec Bitcoin Core 30.2 ?
|
|
- Faut-il utiliser une approche différente pour les descriptor wallets ?
|
|
|
|
### Informations Supplémentaires
|
|
|
|
**Version Bitcoin Core** : 30.2.0
|
|
**Type de wallet** : Descriptor wallet (sqlite)
|
|
**Méthode d'import** : `importdescriptors` avec descriptor `pk($PRIVKEY)#$CHECKSUM`
|
|
**Script de mining** : Basé sur `contrib/signet/miner.py` de Bitcoin Core
|
|
|
|
**Commandes de test** :
|
|
```bash
|
|
# Vérifier le descriptor
|
|
bitcoin-cli listdescriptors | grep "pk("
|
|
|
|
# Tester walletprocesspsbt (échoue)
|
|
miner --cli="bitcoin-cli" generate --nbits=1e0377ae --set-block-time=$(date +%s)
|
|
```
|
|
|
|
### Résultat Attendu
|
|
|
|
Le wallet devrait pouvoir signer le PSBT signet via `walletprocesspsbt`, permettant au miner de créer et soumettre des blocs sur le signet.
|
|
|
|
### Ressources Consultées
|
|
|
|
- Documentation Bitcoin Core RPC : `walletprocesspsbt`, `importdescriptors`
|
|
- Code source : `contrib/signet/miner.py`
|
|
- Documentation descriptor wallets Bitcoin Core 30+
|
|
|
|
---
|
|
|
|
**Question principale** : Comment faire fonctionner le mining Bitcoin Signet avec Bitcoin Core 30.2 et descriptor wallets lorsque `walletprocesspsbt` échoue à signer le PSBT signet malgré un descriptor `pk()` correctement importé avec les clés privées ?
|