mirror of
https://github.com/LORDBABUINO/stealth.git
synced 2026-05-29 23:59:27 -07:00
101 lines
4.1 KiB
Bash
Executable File
101 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# setup.sh — Bootstrap Bitcoin Core regtest for stealth-cli development
|
|
# =============================================================================
|
|
# Creates a local regtest environment with a funded wallet, then prints the
|
|
# descriptor and a ready-to-use stealth-cli command.
|
|
#
|
|
# Prerequisites: bitcoind, bitcoin-cli, cargo (Rust toolchain).
|
|
#
|
|
# Usage:
|
|
# ./scripts/setup.sh # keep existing chain state
|
|
# ./scripts/setup.sh --fresh # wipe regtest, start from genesis
|
|
# =============================================================================
|
|
set -euo pipefail
|
|
|
|
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
CONF="$REPO_DIR/bitcoin.conf"
|
|
DATADIR="$REPO_DIR/.bitcoin-regtest"
|
|
WALLET="scanwallet_cli"
|
|
INITIAL_BLOCKS=101
|
|
|
|
# ─── Parse args ───────────────────────────────────────────────────────────────
|
|
FRESH=0
|
|
for arg in "$@"; do
|
|
[[ "$arg" == "--fresh" ]] && FRESH=1
|
|
done
|
|
|
|
# ─── Ensure bitcoin.conf exists ──────────────────────────────────────────────
|
|
if [[ ! -f "$CONF" ]]; then
|
|
if [[ -f "$REPO_DIR/bitcoin.conf.example" ]]; then
|
|
cp "$REPO_DIR/bitcoin.conf.example" "$CONF"
|
|
echo "Copied bitcoin.conf.example → bitcoin.conf"
|
|
else
|
|
echo "error: bitcoin.conf not found (copy bitcoin.conf.example first)" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
bcli() { bitcoin-cli -datadir="$DATADIR" -conf="$CONF" -regtest -rpcport=18443 "$@"; }
|
|
|
|
# ─── Optionally wipe regtest chain ───────────────────────────────────────────
|
|
if [[ $FRESH -eq 1 ]]; then
|
|
bcli stop 2>/dev/null || true
|
|
sleep 2
|
|
rm -rf "$DATADIR"
|
|
echo "Wiped regtest data"
|
|
fi
|
|
|
|
# ─── Start bitcoind if not running ───────────────────────────────────────────
|
|
mkdir -p "$DATADIR"
|
|
if ! bcli getblockchaininfo >/dev/null 2>&1; then
|
|
bitcoind -datadir="$DATADIR" -conf="$CONF" -daemon
|
|
echo -n "Waiting for bitcoind"
|
|
for _ in $(seq 1 60); do
|
|
if bcli getblockchaininfo >/dev/null 2>&1; then
|
|
echo " ready"
|
|
break
|
|
fi
|
|
echo -n "."
|
|
sleep 0.5
|
|
done
|
|
fi
|
|
|
|
# ─── Create / load wallet ────────────────────────────────────────────────────
|
|
if ! bcli -rpcwallet="$WALLET" getwalletinfo >/dev/null 2>&1; then
|
|
bcli loadwallet "$WALLET" >/dev/null 2>&1 || bcli createwallet "$WALLET" >/dev/null
|
|
fi
|
|
|
|
# ─── Mine initial blocks ─────────────────────────────────────────────────────
|
|
BLOCKS=$(bcli getblockcount)
|
|
if [[ $BLOCKS -lt $INITIAL_BLOCKS ]]; then
|
|
NEED=$(( INITIAL_BLOCKS - BLOCKS ))
|
|
ADDR=$(bcli -rpcwallet="$WALLET" getnewaddress "" bech32)
|
|
bcli generatetoaddress "$NEED" "$ADDR" >/dev/null
|
|
echo "Mined $NEED blocks (now at $(bcli getblockcount))"
|
|
fi
|
|
|
|
# ─── Print descriptor for stealth-cli ─────────────────────────────────────────
|
|
DESC=$(bcli -rpcwallet="$WALLET" listdescriptors \
|
|
| grep -o '"desc":"[^"]*"' \
|
|
| grep '/0/\*' \
|
|
| grep -v 'internal' \
|
|
| head -1 \
|
|
| sed 's/"desc":"//;s/"$//')
|
|
|
|
COOKIE="$DATADIR/regtest/.cookie"
|
|
|
|
echo ""
|
|
echo "Regtest ready."
|
|
echo ""
|
|
echo "Descriptor:"
|
|
echo " $DESC"
|
|
echo ""
|
|
echo "Run:"
|
|
echo " cargo run --bin stealth-cli -- scan \\"
|
|
echo " --descriptor '$DESC' \\"
|
|
echo " --rpc-url http://127.0.0.1:18443 \\"
|
|
echo " --rpc-cookie '$COOKIE' \\"
|
|
echo " --format text"
|