feat(miner): import automatisé des descripteurs Signet (xprv+#checksum), dérivation COINBASE_ADDRESS, entrypoint souple; docs+tests
This commit is contained in:
parent
ffb2431f64
commit
2c68536a29
39
docs/miner/REDEPLOY.md
Normal file
39
docs/miner/REDEPLOY.md
Normal file
@ -0,0 +1,39 @@
|
||||
# Redéploiement du miner Signet
|
||||
|
||||
## Pré-requis
|
||||
- Conteneurs `bitcoin-signet` (signet) et `signet_miner`.
|
||||
- Fichier d'environnement `miner/.env.signet` (voir variables ci-dessous).
|
||||
|
||||
## Variables (miner/.env.signet)
|
||||
- RPC_HOST, RPC_PORT
|
||||
- WATCHONLY_WALLET, MINING_WALLET, MINER_TAG
|
||||
- SIGNET_CHALLENGE, SIGNET_MAGIC
|
||||
- MINING_FINGERPRINT, MINING_XPRV, MINING_PATH_PREFIX (ex: `48'/1'/0'/2'`)
|
||||
- COINBASE_INDEX (ex: 0)
|
||||
- COINBASE_ADDRESS (laisser vide, sera rempli par le script)
|
||||
- BITCOIN_CONTAINER (ex: `bitcoin-signet`)
|
||||
- CHALLENGE_ALLPUBS (optionnel: descripteur sortedmulti complet du challenge)
|
||||
|
||||
## Import des descripteurs
|
||||
```bash
|
||||
cd miner
|
||||
./tools/import_signet_descriptors.sh
|
||||
```
|
||||
- Crée/recée `mining_mnemonic` en mode descriptors si nécessaire
|
||||
- Importe les descripteurs privés external(0/*) et internal(1/*)
|
||||
- Importe en option le descripteur complet du challenge (avec remplacement tpub->xprv de notre clé)
|
||||
- Renseigne `COINBASE_ADDRESS` si vide (via `getnewaddress`)
|
||||
|
||||
## Lancement du miner
|
||||
```bash
|
||||
docker compose stop signet_miner
|
||||
docker compose up -d --build signet_miner
|
||||
```
|
||||
|
||||
## Vérifications
|
||||
- `docker logs --tail=100 signet_miner`
|
||||
- Succès: lignes `Mined block at height ...` (fin de `PSBT signing failed`)
|
||||
|
||||
## REX technique
|
||||
- Problème: `Cannot import descriptor without private keys...` => causé par l’usage du descripteur normalisé renvoyé par `getdescriptorinfo` (tpub). Solution: conserver xprv + ajouter checksum `#xxxxxx`.
|
||||
- Problème: wallet non-descriptor existant => recréer en descriptors (unload + rm -rf du répertoire wallet) avant import.
|
16
miner/.env.signet
Normal file
16
miner/.env.signet
Normal file
@ -0,0 +1,16 @@
|
||||
# Variables d'environnement pour le miner Signet
|
||||
RPC_HOST="bitcoin"
|
||||
RPC_PORT="38332"
|
||||
WATCHONLY_WALLET="watchonly"
|
||||
MINING_WALLET="mining_mnemonic"
|
||||
MINER_TAG="lecoffre"
|
||||
SIGNET_CHALLENGE="0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821"
|
||||
SIGNET_MAGIC="b066463d"
|
||||
MINING_FINGERPRINT="86936c07"
|
||||
MINING_XPRV="tprv8inwidD6qpNwMNY5ZadhYMn62d1WHvSVMRH2pPAj7RsAZGCY4YTiT1McMQSg5DAyijPBZ4HroX83vZQAevQkJSZUVH8kro9JnVbhTPBSAxL"
|
||||
MINING_PATH_PREFIX="48'/1'/0'/2'"
|
||||
COINBASE_INDEX="0"
|
||||
COINBASE_ADDRESS=tb1q3389vh0k8e9fckjft2pxavnw5qy8xpyvfep8nrhfd07jag3z6pdqpuz82a
|
||||
BITCOIN_CONTAINER="bitcoin-signet"
|
||||
# Descripteur sortedmulti challenge (toutes pubs), une de nos clés sera remplacée par MINING_XPRV automatiquement
|
||||
CHALLENGE_ALLPUBS="wsh(sortedmulti(1,[fca68db6/48'/1'/0'/2']tpubDFeV77XRwb9Lob5tBxtPUpZEu9fsj7xS3roiut4BBPzpVvGCT3SShGWksqUYLqKBrt7xeKmmmgSrgbRiffcoS5KPiqyDWk5Kgvxek52XnNV/0/*,[5df7e4b0/48'/1'/0'/2']tpubDF4ix3sjhgzM7iJVfTUVnx3HJ8kvkAvk36sPv5JmsmQcfPPK5KkHxJSgixZAdcYEsGcvHacm1hW4iLksGoTZocJozuaA2BTNp3GEvW432qu/0/*,[ef9d9ce6/48'/1'/0'/2']tpubDFecZkh4Bn5qutowNUC7huYGQeN9VRbNUauhAEN2ofVPat1zZ2yzYg7aULxsdzh79AFz7rBTVQeu2BsBay88XrFLc5diENj4ibizrwPNMbM/0/*,[86936c07/48'/1'/0'/2']tpubDFUys3FLzC4cEqZsTEJHwmSCbeXSTFdPvisp6uD2XhfZPkTJgwHJdVyUXYcfLRrikRxA2MpBaZWE5kZCtHFc15aVtktsHMrTijDjq2dKRGK/0/*,[7f7d263a/48'/1'/0'/2']tpubDEXXuskdCWjFnHuhjHYiWhcCGkz5YGUAj1THU6BRGhvrmwoKohttocoXTCCE9udffumcou7ZYUR5RNqwHW4kw7Jv2UXUUSKeKqJd9xGmSCs/0/*,[154159b3/48'/1'/0'/2']tpubDE3Nt1GGDjm9b2LNXCsszTgXwHDcpmXYCAsZzR9Uy9suicjmA6RqFezD5o8EWHk1vrztkPreHbYXKqGAdupKJNcKWYViKsQNMfr4uW8vcWq/0/*,[46d93da5/48'/1'/0'/2']tpubDF9n9yTw6Ck34SueKLCbv1djAhShkSoTG2m3kATNXKUi5nJwtJ6URJCg4M1je81fyabsX4t6F2itrQinMuu3cYLbpLbVQwWBUwYA8pPyKdZ/0/*,[d3c3bc8f/48'/1'/0'/2']tpubDFGmZ3HuCwoKMhMV7fMWAG2MBz3zWtvupca6oCys9KwAYKiYMB9NHGNq9qvVgPgDgpDLSiCqnp71f7WsV9N1cLkzsjqW9gxJF9VQ9oSZcj9/0/*,[8e236875/48'/1'/0'/2']tpubDFmB8SZte1hp77FdUn8kbHu7doJzWXaRLNoZ2r7V4x5aQY5dL9AaCmrvUNZSPYHJKeqto8roTvUpwWFazfxHEg5DvMq8br266uuD1JKieWj/0/*,[a3a9eb52/48'/1'/0'/2']tpubDE9uNJtEiu5UTMSEkK5egjKH6pXmw2KSAQQ6AbRqVngdHZuPHwxBeiofypHrGmG1WkvAtgjjn7gmPddzaz3ymQj9m3CDFLGEB6Ao4xqripj/0/*,[d03aacca/48'/1'/0'/2']tpubDFQ8YU5mdgP8kJcwhC9HPRQe6W83FNs3BMVTqq5S4ywanEqhdRkpp2cYpro3XRXKJPi8d1d3m4L2JXWdNQFfs31x37S3zfPpd7pwKEwLAm7/0/*,[ce3600ea/48'/1'/0'/2']tpubDFa2XbnHLcVbGM8NAq1soFJmJqtEeePkXAcWxHL71eWasMJujtrKWeQVp7NHQY5euJL2bFuBkVQHk4uoDrVRfCEELLxJhHuNouPquffbmUy/0/*,[fe898c92/48'/1'/0'/2']tpubDDzSj7jfCzXHnZjYNQV6MTK4iuztXr3SeXrQMWNwNiswTGJFdT9QGyjPWMoYcoPY9HCYbLdcMGiDokrWDWWZEhg8HpbgebenhJujvTzMeeN/0/*,[d33c583b/48'/1'/0'/2']tpubDFAeQcDpVPCyjLujPV1Li9LXJwqDvbmESE7wAMEABhesJM4Lhd8pqMgpDVSmf4cpdsfZbDWkhfyxeyG3SaWcB4MqEqhbseQ8mk41PPHb57T/0/*,[facf6b1f/48'/1'/0'/2']tpubDFBTNmh8E5RA9ehaZg9wCHWZvRMKNawQNmmd6V9SQb3NUW9s9y5iupMmDxAbBFFrytzotW9hu8REgqSFg26Q8mcvBjSAaVz9QcNzmCxRJdv/0/*))"
|
@ -7,12 +7,28 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends ca-certificates curl \
|
||||
&& apt-get install -y --no-install-recommends ca-certificates curl gnupg \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Installer bitcoin-cli (binaire officiel)
|
||||
RUN curl -L -o /tmp/bitcoin-cli.tar.gz https://bitcoincore.org/bin/bitcoin-core-26.2/bitcoin-26.2-x86_64-linux-gnu.tar.gz \
|
||||
&& mkdir -p /tmp/bitcoin-cli \
|
||||
&& tar -xzf /tmp/bitcoin-cli.tar.gz -C /tmp/bitcoin-cli --strip-components=2 bitcoin-26.2/bin/bitcoin-cli \
|
||||
&& mv /tmp/bitcoin-cli/bitcoin-cli /usr/local/bin/bitcoin-cli \
|
||||
&& chmod +x /usr/local/bin/bitcoin-cli \
|
||||
&& rm -rf /tmp/bitcoin-cli /tmp/bitcoin-cli.tar.gz
|
||||
|
||||
COPY requirements.txt ./
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Vendoriser test_framework depuis Bitcoin Core (pour le script signet/miner)
|
||||
RUN curl -L -o /tmp/bitcoin-core.tar.gz https://github.com/bitcoin/bitcoin/archive/refs/tags/v26.2.tar.gz \
|
||||
&& mkdir -p /tmp/bitcoin-core \
|
||||
&& tar -xzf /tmp/bitcoin-core.tar.gz -C /tmp/bitcoin-core --strip-components=1 \
|
||||
&& mkdir -p /app/test/functional \
|
||||
&& cp -r /tmp/bitcoin-core/test/functional/test_framework /app/test/functional/test_framework \
|
||||
&& rm -rf /tmp/bitcoin-core /tmp/bitcoin-core.tar.gz
|
||||
|
||||
COPY entrypoint.sh ./
|
||||
COPY signet_miner.py ./
|
||||
COPY signet/ ./signet/
|
||||
|
@ -2,11 +2,16 @@
|
||||
set -euo pipefail
|
||||
|
||||
BITCOIN_DIR=${BITCOIN_DIR:-/bitcoin}
|
||||
# Le volume monte /home/bitcoin/.bitcoin -> /bitcoin, donc le cookie est /bitcoin/signet/.cookie
|
||||
COOKIE_FILE=${COOKIE_FILE:-$BITCOIN_DIR/signet/.cookie}
|
||||
RPC_HOST=${RPC_HOST:-bitcoin}
|
||||
RPC_PORT=${RPC_PORT:-38332}
|
||||
POLL_INTERVAL=${POLL_INTERVAL:-5}
|
||||
WATCHONLY_WALLET=${WATCHONLY_WALLET:-watchonly}
|
||||
MINING_WALLET=${MINING_WALLET:-mining_mnemonic}
|
||||
MINER_TAG=${MINER_TAG:-lecoffre}
|
||||
|
||||
# Ajouter test_framework au PYTHONPATH
|
||||
export PYTHONPATH="/app/test/functional:${PYTHONPATH:-}"
|
||||
|
||||
if [ ! -f "$COOKIE_FILE" ]; then
|
||||
echo "Cookie introuvable: $COOKIE_FILE" >&2
|
||||
@ -14,15 +19,23 @@ if [ ! -f "$COOKIE_FILE" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Variables attendues via env_file miner/.env
|
||||
export SIGNET_MINER_WIF=${SIGNET_MINER_WIF:-}
|
||||
export SIGNET_MINER_XPRV=${SIGNET_MINER_XPRV:-}
|
||||
export DERIVATION_PATH=${DERIVATION_PATH:-}
|
||||
export SIGNET_CHALLENGE=${SIGNET_CHALLENGE:-}
|
||||
export COINBASE_ADDRESS=${COINBASE_ADDRESS:-}
|
||||
# Variables attendues via miner/.env
|
||||
: "${COINBASE_ADDRESS:?COINBASE_ADDRESS non défini}"
|
||||
|
||||
exec python /app/signet_miner.py \
|
||||
--cookie "$COOKIE_FILE" \
|
||||
--rpc-host "$RPC_HOST" \
|
||||
--rpc-port "$RPC_PORT" \
|
||||
--poll-interval "$POLL_INTERVAL"
|
||||
# Lancer le miner (les options globales doivent précéder la sous-commande)
|
||||
MINER_CMD=(
|
||||
python /app/signet/miner \
|
||||
--cli "bitcoin-cli -datadir=$BITCOIN_DIR -rpcconnect=$RPC_HOST -rpcport=$RPC_PORT" \
|
||||
generate \
|
||||
--ongoing \
|
||||
--min-nbits \
|
||||
--WATCHONLY_WALLET "$WATCHONLY_WALLET" \
|
||||
--MINING_WALLET "$MINING_WALLET" \
|
||||
--MINER_TAG "$MINER_TAG"
|
||||
)
|
||||
|
||||
if [ -n "${COINBASE_ADDRESS:-}" ]; then
|
||||
MINER_CMD+=( --address "$COINBASE_ADDRESS" )
|
||||
fi
|
||||
|
||||
exec "${MINER_CMD[@]}"
|
||||
|
@ -1,2 +1,3 @@
|
||||
requests==2.32.3
|
||||
python-bitcointx==1.1.2
|
||||
websockets==12.0
|
||||
|
78
miner/tools/import_signet_descriptors.sh
Executable file
78
miner/tools/import_signet_descriptors.sh
Executable file
@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
|
||||
ENV_FILE="$ROOT_DIR/.env.signet"
|
||||
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
echo "Fichier d'env introuvable: $ENV_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV_FILE"
|
||||
|
||||
cli() {
|
||||
docker exec "$BITCOIN_CONTAINER" sh -lc "bitcoin-cli -conf=/etc/bitcoin/bitcoin.conf -signet $*"
|
||||
}
|
||||
|
||||
cli_stdin() {
|
||||
local subcmd="$1"; shift || true
|
||||
docker exec -i "$BITCOIN_CONTAINER" sh -lc "bitcoin-cli -conf=/etc/bitcoin/bitcoin.conf -signet -stdin $subcmd"
|
||||
}
|
||||
|
||||
extract_checksum() {
|
||||
sed -n 's/.*"checksum"[[:space:]]*:[[:space:]]*"\([a-z0-9]\{8\}\)".*/\1/p' | tr -d '\n'
|
||||
}
|
||||
|
||||
wallet_is_descriptors() {
|
||||
cli -rpcwallet="$MINING_WALLET" getwalletinfo 2>/dev/null | grep -q '"descriptors"[[:space:]]*:[[:space:]]*true'
|
||||
}
|
||||
|
||||
wallet_exists() {
|
||||
cli -rpcwallet="$MINING_WALLET" getwalletinfo >/dev/null 2>&1
|
||||
}
|
||||
|
||||
ensure_descriptors_wallet() {
|
||||
local wallet_path="/home/bitcoin/.bitcoin/signet/wallets/$MINING_WALLET"
|
||||
if wallet_exists && wallet_is_descriptors; then
|
||||
return 0
|
||||
fi
|
||||
cli -rpcwallet="$MINING_WALLET" unloadwallet "$MINING_WALLET" >/dev/null 2>&1 || true
|
||||
docker exec "$BITCOIN_CONTAINER" sh -lc "if [ -d '$wallet_path' ]; then rm -rf '$wallet_path'; fi"
|
||||
cli createwallet "$MINING_WALLET" false true "" true true true false >/dev/null
|
||||
}
|
||||
|
||||
ensure_descriptors_wallet
|
||||
|
||||
DESC_EXT_ORIG="wsh(multi(1,[$MINING_FINGERPRINT/$MINING_PATH_PREFIX]$MINING_XPRV/0/*))"
|
||||
DESC_INT_ORIG="wsh(multi(1,[$MINING_FINGERPRINT/$MINING_PATH_PREFIX]$MINING_XPRV/1/*))"
|
||||
|
||||
CS_EXT=$(printf '%s' "$DESC_EXT_ORIG" | cli_stdin getdescriptorinfo | extract_checksum)
|
||||
CS_INT=$(printf '%s' "$DESC_INT_ORIG" | cli_stdin getdescriptorinfo | extract_checksum)
|
||||
DESC_EXT="$DESC_EXT_ORIG#$CS_EXT"
|
||||
DESC_INT="$DESC_INT_ORIG#$CS_INT"
|
||||
|
||||
PAYLOAD_MINER=$(printf '[{"desc":"%s","timestamp":"now","active":true,"range":[0,1000]},{"desc":"%s","timestamp":"now","active":true,"internal":true,"range":[0,1000]}]' "$DESC_EXT" "$DESC_INT")
|
||||
printf '%s\n' "$PAYLOAD_MINER" | cli_stdin importdescriptors | cat
|
||||
|
||||
# Adresse coinbase: si vide, utiliser getnewaddress du wallet (garanti p2wsh multisig)
|
||||
if [ -z "${COINBASE_ADDRESS:-}" ]; then
|
||||
ADDR=$(cli -rpcwallet="$MINING_WALLET" getnewaddress coinbase bech32)
|
||||
tmpfile=$(mktemp)
|
||||
awk -v addr="$ADDR" 'BEGIN{updated=0} /^COINBASE_ADDRESS=/{print "COINBASE_ADDRESS=" addr; updated=1; next} {print} END{if(updated==0) print "COINBASE_ADDRESS=" addr}' "$ENV_FILE" > "$tmpfile"
|
||||
mv "$tmpfile" "$ENV_FILE"
|
||||
echo "COINBASE_ADDRESS=$ADDR"
|
||||
else
|
||||
echo "COINBASE_ADDRESS=$COINBASE_ADDRESS"
|
||||
fi
|
||||
|
||||
if [ -n "${CHALLENGE_ALLPUBS:-}" ]; then
|
||||
CHALL_PRIV_ORIG=$(printf '%s' "$CHALLENGE_ALLPUBS" | sed -E "s#\[$MINING_FINGERPRINT/$MINING_PATH_PREFIX\]tpub[[:alnum:]]+#[$MINING_FINGERPRINT/$MINING_PATH_PREFIX]$MINING_XPRV#g")
|
||||
CS_CHALL=$(printf '%s' "$CHALL_PRIV_ORIG" | cli_stdin getdescriptorinfo | extract_checksum)
|
||||
CHALL_PRIV="$CHALL_PRIV_ORIG#$CS_CHALL"
|
||||
PAYLOAD_CHAL=$(printf '[{"desc":"%s","timestamp":"now","active":false,"range":[0,1000]}]' "$CHALL_PRIV")
|
||||
printf '%s\n' "$PAYLOAD_CHAL" | cli_stdin importdescriptors | cat
|
||||
fi
|
||||
|
||||
echo "Import terminé."
|
160
miner/tools/priv_key.md
Normal file
160
miner/tools/priv_key.md
Normal file
@ -0,0 +1,160 @@
|
||||
[
|
||||
{
|
||||
"Mnemonic":"tower keen enrich problem essence east plastic lounge merge sand increase company"
|
||||
"xprv":
|
||||
"tprv8inwidD6qpNwMNY5ZadhYMn62d1WHvSVMRH2pPAj7RsAZGCY4YTiT1McMQSg5DAyijPBZ4HroX83vZQAevQkJSZUVH8kro9JnVbhTPBSAxL"
|
||||
"wallet descriptor":"wsh(multi(1,[86936c07/48'/1'/0'/2']tpubDFUys3FLzC4cEqZsTEJHwmSCbeXSTFdPvisp6uD2XhfZPkTJgwHJdVyUXYcfLRrikRxA2MpBaZWE5kZCtHFc15aVtktsHMrTijDjq2dKRGK/0/*))#pslna7dm"
|
||||
},
|
||||
{
|
||||
"Mnemonic":"deer trust ceiling youth brass rapid scout cradle better clap spike morning"
|
||||
"xprv":
|
||||
"tprv8iNgodqVZKJgEFGhmoouPYPAj7EzaqjqToGcdZGUTVcDpu8YSvvhmoppYp7vWG2LR2SrF93AVYZGgG9bCzuQs1xqwJ2QW8hRwtEVdyUofuH"
|
||||
"wallet descriptor": "wsh(multi(1,[5df7e4b0/48'/1'/0'/2']tpubDF4ix3sjhgzM7iJVfTUVnx3HJ8kvkAvk36sPv5JmsmQcfPPK5KkHxJSgixZAdcYEsGcvHacm1hW4iLksGoTZocJozuaA2BTNp3GEvW432qu/0/*))#4ma3uvl0"
|
||||
},
|
||||
## 0840
|
||||
|
||||
2906 - 8814
|
||||
protect
|
||||
shift
|
||||
{
|
||||
Mnemonic: control load guard error caution hundred main adjust happy infant safe brother
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8hTsDtqzaXPoZtQSrfR4HKfAXo1qmh8Xb6oJt5PY5WtET5ecfZ8bUEBoofVrH6s8STU586QHhYSppmQ3n1nvsZ6p5VaKu4MHxsvzUf1gg2D
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[a3a9eb52/48'/1'/0'/2']tpubDE9uNJtEiu5UTMSEkK5egjKH6pXmw2KSAQQ6AbRqVngdHZuPHwxBeiofypHrGmG1WkvAtgjjn7gmPddzaz3ymQj9m3CDFLGEB6Ao4xqripj/0/*))#ju6z6s7v
|
||||
},
|
||||
## 7851
|
||||
|
||||
482
|
||||
boat nice
|
||||
6525
|
||||
{
|
||||
Mnemonic: venture ice crash venture tourist tail naive curtain pilot engage code celery
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8iTk1ZRgwq4NAysrRgY1Wbycbfvmb7cYgjAGTeR573gKFJ4BFuGtEoaotCS6wdGiUfC2BTHg79tiX7i6NuFiTfjiaM8LXfNzL77YuBGY3K7
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[46d93da5/48'/1'/0'/2']tpubDF9n9yTw6Ck34SueKLCbv1djAhShkSoTG2m3kATNXKUi5nJwtJ6URJCg4M1je81fyabsX4t6F2itrQinMuu3cYLbpLbVQwWBUwYA8pPyKdZ/0/*))#8q8j9sft
|
||||
},
|
||||
## 2531
|
||||
|
||||
768
|
||||
poem
|
||||
idle
|
||||
4060
|
||||
{
|
||||
Mnemonic: sheriff zone betray cactus error enable code flat coyote worry guitar equal
|
||||
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
|
||||
`tprv8iajQdFf4a7eUEKhE1gukrNEcxY4MZk1FJyKWgwZj48mhqTminKn6mkxyfyn1QwJ2XUke2aiXfXNQ2XqpGBbwXSSRK8hvqHQJuHWHs68YTh`
|
||||
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
|
||||
`wsh(multi(1,[d3c3bc8f/48'/1'/0'/2']tpubDFGmZ3HuCwoKMhMV7fMWAG2MBz3zWtvupca6oCys9KwAYKiYMB9NHGNq9qvVgPgDgpDLSiCqnp71f7WsV9N1cLkzsjqW9gxJF9VQ9oSZcj9/0/*))#7r3f3xys`
|
||||
},
|
||||
## 4nkweb.com/node1
|
||||
|
||||
signing method: Core
|
||||
{
|
||||
Mnemonic:
|
||||
```
|
||||
bottom sight mistake next reveal modify rather bulk mountain arrow useful buzz
|
||||
```
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
```
|
||||
tprv8hqVmTiP493atpsuqdt87Hx5hjU9NwHG9hrWBa97rS8TwTYZBK5Jd8BfH4Jv154oP9YRWy7kU9p7xnqTwXCAnKZuEpACt2uzTx83HrTjqen
|
||||
```
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
```
|
||||
wsh(multi(1,[7f7d263a/48'/1'/0'/2']tpubDEXXuskdCWjFnHuhjHYiWhcCGkz5YGUAj1THU6BRGhvrmwoKohttocoXTCCE9udffumcou7ZYUR5RNqwHW4kw7Jv2UXUUSKeKqJd9xGmSCs/0/*))#zc5ruh7c
|
||||
```
|
||||
},
|
||||
## 4nkweb.com/node2
|
||||
|
||||
signing method: Core
|
||||
{
|
||||
Mnemonic:
|
||||
```
|
||||
payment ill whisper noble casual shallow clown pipe keen pencil fluid term
|
||||
```
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
```
|
||||
tprv8hMLjbE25N5UhZJadZDHb42RNFhgfSLdcsGnhu7BYt5Wt8UzXhcF5ANLuezsgJUNyCC4TJtekes9gssUCm6UKASnqMTPwm6KcePSw4npybF
|
||||
```
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
```
|
||||
wsh(multi(1,[154159b3/48'/1'/0'/2']tpubDE3Nt1GGDjm9b2LNXCsszTgXwHDcpmXYCAsZzR9Uy9suicjmA6RqFezD5o8EWHk1vrztkPreHbYXKqGAdupKJNcKWYViKsQNMfr4uW8vcWq/0/*))#5k6w6h6g
|
||||
```
|
||||
},
|
||||
## 4nkweb.com/node3
|
||||
|
||||
signing method: Core
|
||||
{
|
||||
Mnemonic:
|
||||
`lesson trumpet royal bright three oval vague organ atom joke favorite april`
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
`tprv8ixSxhVBoDTfv846JKDo5Qu8L89wZnmXUZCwdN1sm8CRfS1RpecrWmtthiTqepjnBroRit3Zygn53z3v8QWp3bqQYjev2Mn92g9jGkzaGya`
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
`wsh(multi(1,[fca68db6/48'/1'/0'/2']tpubDFeV77XRwb9Lob5tBxtPUpZEu9fsj7xS3roiut4BBPzpVvGCT3SShGWksqUYLqKBrt7xeKmmmgSrgbRiffcoS5KPiqyDWk5Kgvxek52XnNV/0/*))#j6sm3ntm`
|
||||
},
|
||||
## 4nkweb.com/node4
|
||||
|
||||
signing method: Core
|
||||
{
|
||||
Mnemonic:
|
||||
```
|
||||
lyrics undo baby chicken possible vicious capital fun order salon maple source
|
||||
```
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
```
|
||||
tprv8ixaRLep3QQB2Rn9UpXXJVt9qcrDL6QTuHJusiKjPPgzkPmDveAQNBViJBrJakLKaoc3w7JzNUXAkSaeQHJAzGsMnrJQggWNkMn1e9rihgP
|
||||
```
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
```
|
||||
wsh(multi(1,[ef9d9ce6/48'/1'/0'/2']tpubDFecZkh4Bn5qutowNUC7huYGQeN9VRbNUauhAEN2ofVPat1zZ2yzYg7aULxsdzh79AFz7rBTVQeu2BsBay88XrFLc5diENj4ibizrwPNMbM/0/*))#zyhj4kj3
|
||||
```
|
||||
},
|
||||
## unallocated keys
|
||||
{
|
||||
* Mnemonic: canoe coral egg public boss stable mercy side tennis behind dance shy
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8j58z2XeVe29DeDqb8UABtF14mo4MCPWm5CmkL5BegHBa3prhkLz2HF4JFwU5Z6ypnA7qCVcwdyPGj5yqXPoXiaE2Rcosmx9Ntiav39vRfp
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[8e236875/48'/1'/0'/2']tpubDFmB8SZte1hp77FdUn8kbHu7doJzWXaRLNoZ2r7V4x5aQY5dL9AaCmrvUNZSPYHJKeqto8roTvUpwWFazfxHEg5DvMq8br266uuD1JKieWj/0/*))#8xxkeruq
|
||||
},
|
||||
{
|
||||
* Mnemonic: expire document depend hamster spy become blossom midnight ecology salon all earth
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8ii6Q43XVJhTrqb9oYUgz1kXXUc763g8c3tgZK38ei9Bwkaw12wEdXzgemB6fmF4jgDBAdavNg4YXyRe1XSx3jxjZ8i2fHruuyn6bP4r7uq
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[d03aacca/48'/1'/0'/2']tpubDFQ8YU5mdgP8kJcwhC9HPRQe6W83FNs3BMVTqq5S4ywanEqhdRkpp2cYpro3XRXKJPi8d1d3m4L2JXWdNQFfs31x37S3zfPpd7pwKEwLAm7/0/*))#phcw966k
|
||||
},
|
||||
{
|
||||
* Mnemonic: movie west unit carbon adapt liberty crack easily raise toward brother quality
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8iszPBk3CEovNt6aHBMHPqeejpNJVKCqws1jfmHobNiC2s497W2jL9nde2FmTBWKMpkuKXDuFKPrBqKcEpsjgYeLsoQVT3MgsHoTjTL64qB
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[ce3600ea/48'/1'/0'/2']tpubDFa2XbnHLcVbGM8NAq1soFJmJqtEeePkXAcWxHL71eWasMJujtrKWeQVp7NHQY5euJL2bFuBkVQHk4uoDrVRfCEELLxJhHuNouPquffbmUy/0/*))#lwv5ura2
|
||||
},
|
||||
{
|
||||
* Mnemonic: tip mixture supreme govern faculty panel judge motion aim write soon arrive
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8hJQahhR4cqcu6hkUkpVx3ex9tUxNWrY5EFd4zLdxT5Ycn3V14Kp6V7XLEtJ2N5p5dpVeP9mhMqNwTBBeJaavMDquLh8SRFfdDejAy8yygX
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[fe898c92/48'/1'/0'/2']tpubDDzSj7jfCzXHnZjYNQV6MTK4iuztXr3SeXrQMWNwNiswTGJFdT9QGyjPWMoYcoPY9HCYbLdcMGiDokrWDWWZEhg8HpbgebenhJujvTzMeeN/0/*))#675457w4
|
||||
},
|
||||
{
|
||||
* Mnemonic: identify devote dice young air turkey angle code observe innocent fragile bench
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8iUcGCBaM1XJqsswVqLkJjgQjvKHmGaKrvX9sqBrmRrUTroa5EKEes4x3L7AFE7tLDW4mUCWLmpAhFrjQvZ1uUzuAaziFvLwrtq253g9yzp
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[d33c583b/48'/1'/0'/2']tpubDFAeQcDpVPCyjLujPV1Li9LXJwqDvbmESE7wAMEABhesJM4Lhd8pqMgpDVSmf4cpdsfZbDWkhfyxeyG3SaWcB4MqEqhbseQ8mk41PPHb57T/0/*))#u9xx2lkz
|
||||
},
|
||||
{
|
||||
* Mnemonic: slide hollow decade federal pair brief furnace fit pelican heart better place
|
||||
xprv (to replace xpub with in the descriptor for Bitcoin Core):
|
||||
tprv8iVREMet5hjVGBfng2VLnsrTMPqPDFkVoUAqoy78zKEye1u6XaG8jKju3nsf6GN1UTMbkFWoD6TiTTvnP2ez4NvXyX9c1UMfQ932CmZjuLg
|
||||
wallet descriptor (use it to create the descriptor with all the others):
|
||||
wsh(multi(1,[facf6b1f/48'/1'/0'/2']tpubDFBTNmh8E5RA9ehaZg9wCHWZvRMKNawQNmmd6V9SQb3NUW9s9y5iupMmDxAbBFFrytzotW9hu8REgqSFg26Q8mcvBjSAaVz9QcNzmCxRJdv/0/*))#3407up02
|
||||
}
|
||||
]
|
6
miner/tools/pubkeys.md
Normal file
6
miner/tools/pubkeys.md
Normal file
@ -0,0 +1,6 @@
|
||||
* descriptor (all pubkeys):
|
||||
```wsh(sortedmulti(1,[fca68db6/48'/1'/0'/2']tpubDFeV77XRwb9Lob5tBxtPUpZEu9fsj7xS3roiut4BBPzpVvGCT3SShGWksqUYLqKBrt7xeKmmmgSrgbRiffcoS5KPiqyDWk5Kgvxek52XnNV/0/*,[5df7e4b0/48'/1'/0'/2']tpubDF4ix3sjhgzM7iJVfTUVnx3HJ8kvkAvk36sPv5JmsmQcfPPK5KkHxJSgixZAdcYEsGcvHacm1hW4iLksGoTZocJozuaA2BTNp3GEvW432qu/0/*,[ef9d9ce6/48'/1'/0'/2']tpubDFecZkh4Bn5qutowNUC7huYGQeN9VRbNUauhAEN2ofVPat1zZ2yzYg7aULxsdzh79AFz7rBTVQeu2BsBay88XrFLc5diENj4ibizrwPNMbM/0/*,[86936c07/48'/1'/0'/2']tpubDFUys3FLzC4cEqZsTEJHwmSCbeXSTFdPvisp6uD2XhfZPkTJgwHJdVyUXYcfLRrikRxA2MpBaZWE5kZCtHFc15aVtktsHMrTijDjq2dKRGK/0/*,[7f7d263a/48'/1'/0'/2']tpubDEXXuskdCWjFnHuhjHYiWhcCGkz5YGUAj1THU6BRGhvrmwoKohttocoXTCCE9udffumcou7ZYUR5RNqwHW4kw7Jv2UXUUSKeKqJd9xGmSCs/0/*,[154159b3/48'/1'/0'/2']tpubDE3Nt1GGDjm9b2LNXCsszTgXwHDcpmXYCAsZzR9Uy9suicjmA6RqFezD5o8EWHk1vrztkPreHbYXKqGAdupKJNcKWYViKsQNMfr4uW8vcWq/0/*,[46d93da5/48'/1'/0'/2']tpubDF9n9yTw6Ck34SueKLCbv1djAhShkSoTG2m3kATNXKUi5nJwtJ6URJCg4M1je81fyabsX4t6F2itrQinMuu3cYLbpLbVQwWBUwYA8pPyKdZ/0/*,[d3c3bc8f/48'/1'/0'/2']tpubDFGmZ3HuCwoKMhMV7fMWAG2MBz3zWtvupca6oCys9KwAYKiYMB9NHGNq9qvVgPgDgpDLSiCqnp71f7WsV9N1cLkzsjqW9gxJF9VQ9oSZcj9/0/*,[8e236875/48'/1'/0'/2']tpubDFmB8SZte1hp77FdUn8kbHu7doJzWXaRLNoZ2r7V4x5aQY5dL9AaCmrvUNZSPYHJKeqto8roTvUpwWFazfxHEg5DvMq8br266uuD1JKieWj/0/*,[a3a9eb52/48'/1'/0'/2']tpubDE9uNJtEiu5UTMSEkK5egjKH6pXmw2KSAQQ6AbRqVngdHZuPHwxBeiofypHrGmG1WkvAtgjjn7gmPddzaz3ymQj9m3CDFLGEB6Ao4xqripj/0/*,[d03aacca/48'/1'/0'/2']tpubDFQ8YU5mdgP8kJcwhC9HPRQe6W83FNs3BMVTqq5S4ywanEqhdRkpp2cYpro3XRXKJPi8d1d3m4L2JXWdNQFfs31x37S3zfPpd7pwKEwLAm7/0/*,[ce3600ea/48'/1'/0'/2']tpubDFa2XbnHLcVbGM8NAq1soFJmJqtEeePkXAcWxHL71eWasMJujtrKWeQVp7NHQY5euJL2bFuBkVQHk4uoDrVRfCEELLxJhHuNouPquffbmUy/0/*,[fe898c92/48'/1'/0'/2']tpubDDzSj7jfCzXHnZjYNQV6MTK4iuztXr3SeXrQMWNwNiswTGJFdT9QGyjPWMoYcoPY9HCYbLdcMGiDokrWDWWZEhg8HpbgebenhJujvTzMeeN/0/*,[d33c583b/48'/1'/0'/2']tpubDFAeQcDpVPCyjLujPV1Li9LXJwqDvbmESE7wAMEABhesJM4Lhd8pqMgpDVSmf4cpdsfZbDWkhfyxeyG3SaWcB4MqEqhbseQ8mk41PPHb57T/0/*,[facf6b1f/48'/1'/0'/2']tpubDFBTNmh8E5RA9ehaZg9wCHWZvRMKNawQNmmd6V9SQb3NUW9s9y5iupMmDxAbBFFrytzotW9hu8REgqSFg26Q8mcvBjSAaVz9QcNzmCxRJdv/0/*))#jmqku76u```
|
||||
* signet_challenge:
|
||||
`0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821`
|
||||
* magic:
|
||||
`b066463d`
|
18
tests/miner/import_descriptors.md
Normal file
18
tests/miner/import_descriptors.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Test manuel: import des descripteurs Signet
|
||||
|
||||
## Préparation
|
||||
- Vérifier `miner/.env.signet` (tprv, fingerprint, path)
|
||||
|
||||
## Étapes
|
||||
1. `cd miner && ./tools/import_signet_descriptors.sh`
|
||||
2. Vérifier sortie:
|
||||
- Deux entrées `success: true` (external/internal)
|
||||
- Une entrée `success: true` pour le challenge (warnings admis)
|
||||
- `COINBASE_ADDRESS=tb1...` affichée
|
||||
3. `docker compose up -d --build signet_miner`
|
||||
4. `docker logs --tail=200 signet_miner`
|
||||
- Attendre `Mined block at height ...`
|
||||
|
||||
## Échecs courants
|
||||
- `Cannot import descriptor without private keys...` => utiliser descripteurs xprv+#checksum, pas la version normalisée (tpub).
|
||||
- Wallet non-descriptor => recréer via le script (unload + rm -rf + createwallet descriptors=true).
|
Loading…
x
Reference in New Issue
Block a user