ncantu 937646cc45 Daily backup to git cron, backup/restore scripts, docs
**Motivations:**
- Export Signet and mining wallet backups to git with only 2 versions kept
- Document and add backup/restore scripts for signet and mining wallet

**Correctifs:**
- Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo

**Evolutions:**
- data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section
- .gitignore: data/backup-to-git.log

**Pages affectées:**
- .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
2026-02-04 03:07:57 +01:00

4.1 KiB
Raw Blame History

Miner Bitcoin Signet Documentation

Auteur : Équipe 4NK
Date : 2026-02-02
Version : 1.0

Vue densemble

Le miner est un script Python dérivé de contrib/signet/miner.py de Bitcoin Core. Il permet de miner des blocs sur une chaîne Bitcoin Signet custom en produisant des blocs signés avec la clé du signet (PRIVKEY) et en respectant le SIGNETCHALLENGE.

Emplacement dans le projet :

  • Racine du projet : /home/ncantu/Bureau/code/bitcoin/
  • Script principal : miner (à la racine du projet)
  • Imports et framework de test : miner_imports/ (ce répertoire et son contenu)
  • Script shell de boucle de minage : mine.sh (à la racine)
  • Point dentrée conteneur : run.sh (démarre bitcoind, importe la clé, lance mine.sh si MINERENABLED=1)

Rôle de miner_imports/

Le répertoire miner_imports/ contient le test_framework utilisé par le script miner :

  • test_framework/ : modules Python (messages, blocktools, script, etc.) issus du framework de tests fonctionnels de Bitcoin Core, nécessaires pour construire et sérialiser blocs, transactions et PSBT signet.
  • Le script miner ajoute miner_imports au sys.path et importe depuis test_framework (blocktools, messages, script, etc.).

Aucun exécutable de minage nest dans miner_imports/ : lexécutable est le fichier miner à la racine du projet.

Invocation du miner

Dans le conteneur Docker (voir mine.sh et run.sh) :

bitcoin-cli -rpcwallet=custom_signet getblocktemplate '{"rules": ["segwit", "signet"]}' | \
  miner --cli="bitcoin-cli -datadir=/root/.bitcoin" generate --grind-cmd="bitcoin-util grind" \
  --address=$ADDR --nbits=$NBITS --set-block-time=$(date +%s)
  • --cli : commande bitcoin-cli (avec -datadir dans le conteneur).
  • generate : sous-commande pour miner des blocs (boucle getblocktemplate → signer PSBT signet → grind → submitblock).
  • --grind-cmd : commande pour le proof-of-work (grind du header).
  • --address : adresse de récompense de bloc.
  • --nbits : difficulté cible (ex. 1e0377ae).
  • --set-block-time : timestamp du bloc.

La variable denvironnement PRIVKEY doit être définie (exportée par mine.sh depuis .env) pour que le miner puisse signer le PSBT signet via descriptorprocesspsbt / walletprocesspsbt.

Comportement de bitcoin-cli et option -signet

Le miner appelle Bitcoin RPC via une fonction interne qui construisait toujours la commande en ajoutant -signet aux arguments de bitcoin-cli. Lorsque --cli="bitcoin-cli -datadir=/root/.bitcoin" est utilisé, la config du datadir (ex. bitcoin.conf avec signet=1) définit déjà le réseau signet. Ajouter -signet en plus pouvait provoquer un échec de connexion RPC (exit 1).

Correctif appliqué (dans le script miner) : ne pas ajouter -signet lorsque la commande cli contient déjà -datadir=.

# Quand --cli inclut -datadir=, la config du datadir sélectionne déjà le signet
if not any("-datadir=" in x for x in basecmd):
    basecmd = basecmd + ["-signet"]
cmd = basecmd + args

Référence : correctif documenté dans le dépôt (rechercher « bitcoin_cli » et « -signet » dans le fichier miner).

Descriptor wallet et clé P2PK

Le miner signet doit signer des transactions vers le SIGNETCHALLENGE (script P2PK). La clé privée doit être importée dans le wallet comme descriptor pk() (P2PK), et non wpkh(), pour que walletprocesspsbt puisse signer. Limport est fait dans run.sh au démarrage du conteneur lorsque MINERENABLED=1.

Détails et dépannage : voir docs/TROUBLESHOOTING_MINING.md et docs/SOLUTION_MINING.md à la racine du projet.

Références

  • Racine du projet : /home/ncantu/Bureau/code/bitcoin/
  • Script miner : miner (racine)
  • Boucle de minage : mine.sh (racine)
  • Démarrage conteneur : run.sh, docs/MAINTENANCE.md (section Mining)
  • Dépannage mining : docs/TROUBLESHOOTING_MINING.md
  • Solution PSBT / descriptor : docs/SOLUTION_MINING.md
  • Configuration : docs/ENVIRONMENT.md (MINERENABLED, BLOCKPRODUCTIONDELAY, NBITS, PRIVKEY, etc.)