123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- #!/usr/bin/env bash
- # Helper script for interacting with CDK regtest environment
- # Run this after starting interactive_regtest_mprocs.sh
- # Check for environment state file first, then environment variable
- ENV_FILE="/tmp/cdk_regtest_env"
- if [ -f "$ENV_FILE" ]; then
- source "$ENV_FILE"
- elif [ ! -z "$CDK_ITESTS_DIR" ]; then
- # Environment variable is set, create state file for other sessions
- echo "export CDK_ITESTS_DIR=\"$CDK_ITESTS_DIR\"" > "$ENV_FILE"
- echo "export CDK_TEST_MINT_URL=\"$CDK_TEST_MINT_URL\"" >> "$ENV_FILE"
- echo "export CDK_TEST_MINT_URL_2=\"$CDK_TEST_MINT_URL_2\"" >> "$ENV_FILE"
- echo "export CDK_MINTD_PID=\"$CDK_MINTD_PID\"" >> "$ENV_FILE"
- echo "export CDK_MINTD_LND_PID=\"$CDK_MINTD_LND_PID\"" >> "$ENV_FILE"
- echo "export CDK_REGTEST_PID=\"$CDK_REGTEST_PID\"" >> "$ENV_FILE"
- else
- echo "❌ CDK regtest environment not found!"
- echo "Please run './misc/interactive_regtest_mprocs.sh' or 'just regtest' first"
- exit 1
- fi
- # Validate that the environment is actually running
- if [ -z "$CDK_ITESTS_DIR" ] || [ ! -d "$CDK_ITESTS_DIR" ]; then
- echo "❌ CDK regtest environment not found or directory missing!"
- echo "Please run './misc/interactive_regtest_mprocs.sh' or 'just regtest' first"
- [ -f "$ENV_FILE" ] && rm "$ENV_FILE" # Clean up stale state file
- exit 1
- fi
- show_help() {
- echo "CDK Regtest Environment Helper"
- echo "============================="
- echo
- echo "Lightning Node Commands:"
- echo " ln-cln1 <command> - Execute command on CLN node 1"
- echo " ln-cln2 <command> - Execute command on CLN node 2"
- echo " ln-lnd1 <command> - Execute command on LND node 1"
- echo " ln-lnd2 <command> - Execute command on LND node 2"
- echo
- echo "Bitcoin Commands:"
- echo " btc <command> - Execute bitcoin-cli command"
- echo " btc-mine [blocks] - Mine blocks (default: 10)"
- echo
- echo "CDK Mint Commands:"
- echo " mint-info - Show mint information"
- echo " mint-test - Run integration tests"
- echo " restart-mints - Stop, recompile, and restart both mints (log mode)"
- echo
- echo "Environment Commands:"
- echo " show-env - Show environment variables"
- echo " show-logs - Show recent mint logs"
- echo " show-status - Show status of all components"
- echo " logs - Start mprocs TUI (adapts to current mode)"
- echo
- echo "Environment Modes:"
- echo " just regtest - Log tailing mode (mints auto-start, logs to files)"
- echo " just regtest-mprocs - Direct management (mprocs controls mint processes)"
- echo
- echo "Examples:"
- echo " $0 ln-cln1 getinfo"
- echo " $0 ln-lnd1 getinfo"
- echo " $0 btc getblockcount"
- echo " $0 btc-mine 5"
- echo " $0 mint-info"
- echo " $0 restart-mints # Only works in log tailing mode"
- echo " $0 logs # Start mprocs viewer"
- }
- # Bitcoin commands
- btc_command() {
- bitcoin-cli -regtest -rpcuser=testuser -rpcpassword=testpass -rpcport=18443 "$@"
- }
- btc_mine() {
- local blocks=${1:-10}
- local address=$(btc_command getnewaddress)
- btc_command generatetoaddress "$blocks" "$address"
- echo "Mined $blocks blocks"
- }
- # CLN commands
- cln_command() {
- local node=$1
- shift
- lightning-cli --rpc-file="$CDK_ITESTS_DIR/cln/$node/regtest/lightning-rpc" "$@"
- }
- # LND commands
- lnd_command() {
- local node=$1
- shift
- local port
- case $node in
- "one") port=10009 ;;
- "two") port=10010 ;;
- *) echo "Unknown LND node: $node"; return 1 ;;
- esac
-
- lncli --rpcserver=localhost:$port \
- --tlscertpath="$CDK_ITESTS_DIR/lnd/$node/tls.cert" \
- --macaroonpath="$CDK_ITESTS_DIR/lnd/$node/data/chain/bitcoin/regtest/admin.macaroon" \
- "$@"
- }
- # Mint commands
- mint_info() {
- echo "CLN Mint (Port 8085):"
- curl -s "$CDK_TEST_MINT_URL/v1/info" | jq . 2>/dev/null || curl -s "$CDK_TEST_MINT_URL/v1/info"
- echo
- echo "LND Mint (Port 8087):"
- curl -s "$CDK_TEST_MINT_URL_2/v1/info" | jq . 2>/dev/null || curl -s "$CDK_TEST_MINT_URL_2/v1/info"
- }
- mint_test() {
- echo "Running integration tests..."
- cargo test -p cdk-integration-tests
- }
- # Environment info
- show_env() {
- echo "CDK Regtest Environment Variables:"
- echo "================================="
- echo "CDK_ITESTS_DIR=$CDK_ITESTS_DIR"
- echo "CDK_TEST_MINT_URL=$CDK_TEST_MINT_URL"
- echo "CDK_TEST_MINT_URL_2=$CDK_TEST_MINT_URL_2"
- echo "CDK_MINTD_PID=$CDK_MINTD_PID"
- echo "CDK_MINTD_LND_PID=$CDK_MINTD_LND_PID"
- echo "CDK_REGTEST_PID=$CDK_REGTEST_PID"
- }
- show_logs() {
- echo "=== Recent CLN Mint Logs ==="
- if [ -f "$CDK_ITESTS_DIR/cln_mint/mintd.log" ]; then
- tail -10 "$CDK_ITESTS_DIR/cln_mint/mintd.log"
- else
- echo "Log file not found"
- fi
- echo
- echo "=== Recent LND Mint Logs ==="
- if [ -f "$CDK_ITESTS_DIR/lnd_mint/mintd.log" ]; then
- tail -10 "$CDK_ITESTS_DIR/lnd_mint/mintd.log"
- else
- echo "Log file not found"
- fi
- }
- start_mprocs() {
- echo "Starting mprocs log viewer..."
-
- if ! command -v mprocs >/dev/null 2>&1; then
- echo "❌ mprocs not found! Please install it with:"
- echo " cargo install mprocs"
- echo " or your package manager"
- return 1
- fi
-
- # Check if we have the direct process management config
- DIRECT_MPROCS_CONFIG="$CDK_ITESTS_DIR/mprocs.yaml"
- FALLBACK_MPROCS_CONFIG="$CDK_ITESTS_DIR/mprocs_fallback.yaml"
-
- if [ -f "$DIRECT_MPROCS_CONFIG" ]; then
- echo "Using direct process management mode..."
- echo "In mprocs: 's' to start, 'k' to kill, 'r' to restart processes"
- cd "$CDK_ITESTS_DIR"
- mprocs --config "$DIRECT_MPROCS_CONFIG"
- return
- fi
-
- # Create fallback mprocs configuration for log tailing
- cat > "$FALLBACK_MPROCS_CONFIG" << EOF
- procs:
- cln-mint:
- shell: "touch $CDK_ITESTS_DIR/cln_mint/mintd.log && tail -f $CDK_ITESTS_DIR/cln_mint/mintd.log"
- autostart: true
-
- lnd-mint:
- shell: "touch $CDK_ITESTS_DIR/lnd_mint/mintd.log && tail -f $CDK_ITESTS_DIR/lnd_mint/mintd.log"
- autostart: true
-
- bitcoind:
- shell: "touch $CDK_ITESTS_DIR/bitcoin/regtest/debug.log && tail -f $CDK_ITESTS_DIR/bitcoin/regtest/debug.log"
- autostart: true
-
- cln-one:
- shell: "while [ ! -f $CDK_ITESTS_DIR/cln/one/regtest/log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/cln/one/regtest/log"
- autostart: true
-
- cln-two:
- shell: "while [ ! -f $CDK_ITESTS_DIR/cln/two/regtest/log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/cln/two/regtest/log"
- autostart: true
-
- lnd-one:
- shell: "while [ ! -f $CDK_ITESTS_DIR/lnd/one/logs/bitcoin/regtest/lnd.log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/lnd/one/logs/bitcoin/regtest/lnd.log"
- autostart: true
-
- lnd-two:
- shell: "while [ ! -f $CDK_ITESTS_DIR/lnd/two/logs/bitcoin/regtest/lnd.log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/lnd/two/logs/bitcoin/regtest/lnd.log"
- autostart: true
- settings:
- mouse_scroll_speed: 3
- proc_list_width: 20
- hide_keymap_window: false
- EOF
- echo "Using log tailing mode..."
- echo "Use 'q' to quit the log viewer"
- cd "$CDK_ITESTS_DIR"
- mprocs --config "$FALLBACK_MPROCS_CONFIG"
- }
- show_status() {
- echo "CDK Regtest Environment Status:"
- echo "==============================="
-
- # Check processes
- echo "Processes:"
- if [ ! -z "$CDK_REGTEST_PID" ] && kill -0 $CDK_REGTEST_PID 2>/dev/null; then
- echo " ✓ Regtest network (PID: $CDK_REGTEST_PID)"
- else
- echo " ❌ Regtest network"
- fi
-
- if [ ! -z "$CDK_MINTD_PID" ] && kill -0 $CDK_MINTD_PID 2>/dev/null; then
- echo " ✓ CLN Mint (PID: $CDK_MINTD_PID)"
- else
- echo " ❌ CLN Mint"
- fi
-
- if [ ! -z "$CDK_MINTD_LND_PID" ] && kill -0 $CDK_MINTD_LND_PID 2>/dev/null; then
- echo " ✓ LND Mint (PID: $CDK_MINTD_LND_PID)"
- else
- echo " ❌ LND Mint"
- fi
-
- echo
- echo "Network connectivity:"
- if curl -s "$CDK_TEST_MINT_URL/v1/info" >/dev/null 2>&1; then
- echo " ✓ CLN Mint responding"
- else
- echo " ❌ CLN Mint not responding"
- fi
-
- if curl -s "$CDK_TEST_MINT_URL_2/v1/info" >/dev/null 2>&1; then
- echo " ✓ LND Mint responding"
- else
- echo " ❌ LND Mint not responding"
- fi
- }
- restart_mints() {
- echo "==============================="
- echo "Restarting CDK Mints"
- echo "==============================="
-
- # Stop existing mints
- echo "Stopping existing mints..."
- if [ ! -z "$CDK_MINTD_PID" ] && kill -0 $CDK_MINTD_PID 2>/dev/null; then
- echo " Stopping CLN Mint (PID: $CDK_MINTD_PID)"
- kill -2 $CDK_MINTD_PID
- wait $CDK_MINTD_PID 2>/dev/null || true
- fi
-
- if [ ! -z "$CDK_MINTD_LND_PID" ] && kill -0 $CDK_MINTD_LND_PID 2>/dev/null; then
- echo " Stopping LND Mint (PID: $CDK_MINTD_LND_PID)"
- kill -2 $CDK_MINTD_LND_PID
- wait $CDK_MINTD_LND_PID 2>/dev/null || true
- fi
-
- # Recompile
- echo "Recompiling cdk-mintd..."
- if ! cargo build --bin cdk-mintd; then
- echo "❌ Compilation failed"
- return 1
- fi
- echo "✓ Compilation successful"
-
- # Restart CLN mint
- echo "Starting CLN Mint..."
- export CDK_MINTD_CLN_RPC_PATH="$CDK_ITESTS_DIR/cln/one/regtest/lightning-rpc"
- export CDK_MINTD_URL="http://127.0.0.1:8085"
- export CDK_MINTD_WORK_DIR="$CDK_ITESTS_DIR/cln_mint"
- export CDK_MINTD_LISTEN_HOST="127.0.0.1"
- export CDK_MINTD_LISTEN_PORT=8085
- export CDK_MINTD_LN_BACKEND="cln"
- export CDK_MINTD_MNEMONIC="eye survey guilt napkin crystal cup whisper salt luggage manage unveil loyal"
- export RUST_BACKTRACE=1
-
- cargo run --bin cdk-mintd > "$CDK_MINTD_WORK_DIR/mintd.log" 2>&1 &
- NEW_CLN_PID=$!
-
- # Wait for CLN mint to be ready
- echo "Waiting for CLN mint to start..."
- local start_time=$(date +%s)
- while true; do
- local current_time=$(date +%s)
- local elapsed_time=$((current_time - start_time))
-
- if [ $elapsed_time -ge 30 ]; then
- echo "❌ Timeout waiting for CLN mint"
- return 1
- fi
-
- if curl -s "http://127.0.0.1:8085/v1/info" >/dev/null 2>&1; then
- echo "✓ CLN Mint ready"
- break
- fi
- sleep 1
- done
-
- # Restart LND mint
- echo "Starting LND Mint..."
- export CDK_MINTD_LND_ADDRESS="https://localhost:10010"
- export CDK_MINTD_LND_CERT_FILE="$CDK_ITESTS_DIR/lnd/two/tls.cert"
- export CDK_MINTD_LND_MACAROON_FILE="$CDK_ITESTS_DIR/lnd/two/data/chain/bitcoin/regtest/admin.macaroon"
- export CDK_MINTD_URL="http://127.0.0.1:8087"
- export CDK_MINTD_WORK_DIR="$CDK_ITESTS_DIR/lnd_mint"
- export CDK_MINTD_LISTEN_HOST="127.0.0.1"
- export CDK_MINTD_LISTEN_PORT=8087
- export CDK_MINTD_LN_BACKEND="lnd"
- export CDK_MINTD_MNEMONIC="cattle gold bind busy sound reduce tone addict baby spend february strategy"
-
- cargo run --bin cdk-mintd > "$CDK_MINTD_WORK_DIR/mintd.log" 2>&1 &
- NEW_LND_PID=$!
-
- # Wait for LND mint to be ready
- echo "Waiting for LND mint to start..."
- start_time=$(date +%s)
- while true; do
- current_time=$(date +%s)
- elapsed_time=$((current_time - start_time))
-
- if [ $elapsed_time -ge 30 ]; then
- echo "❌ Timeout waiting for LND mint"
- return 1
- fi
-
- if curl -s "http://127.0.0.1:8087/v1/info" >/dev/null 2>&1; then
- echo "✓ LND Mint ready"
- break
- fi
- sleep 1
- done
-
- # Update PIDs in state file
- CDK_MINTD_PID=$NEW_CLN_PID
- CDK_MINTD_LND_PID=$NEW_LND_PID
-
- # Update state file
- echo "export CDK_ITESTS_DIR=\"$CDK_ITESTS_DIR\"" > "$ENV_FILE"
- echo "export CDK_TEST_MINT_URL=\"$CDK_TEST_MINT_URL\"" >> "$ENV_FILE"
- echo "export CDK_TEST_MINT_URL_2=\"$CDK_TEST_MINT_URL_2\"" >> "$ENV_FILE"
- echo "export CDK_MINTD_PID=\"$CDK_MINTD_PID\"" >> "$ENV_FILE"
- echo "export CDK_MINTD_LND_PID=\"$CDK_MINTD_LND_PID\"" >> "$ENV_FILE"
- echo "export CDK_REGTEST_PID=\"$CDK_REGTEST_PID\"" >> "$ENV_FILE"
-
- echo
- echo "✅ Mints restarted successfully!"
- echo " CLN Mint: http://127.0.0.1:8085 (PID: $CDK_MINTD_PID)"
- echo " LND Mint: http://127.0.0.1:8087 (PID: $CDK_MINTD_LND_PID)"
- echo "==============================="
- }
- # Main command dispatcher
- case "$1" in
- "ln-cln1")
- shift
- cln_command "one" "$@"
- ;;
- "ln-cln2")
- shift
- cln_command "two" "$@"
- ;;
- "ln-lnd1")
- shift
- lnd_command "one" "$@"
- ;;
- "ln-lnd2")
- shift
- lnd_command "two" "$@"
- ;;
- "btc")
- shift
- btc_command "$@"
- ;;
- "btc-mine")
- shift
- btc_mine "$@"
- ;;
- "mint-info")
- mint_info
- ;;
- "mint-test")
- mint_test
- ;;
- "restart-mints")
- restart_mints
- ;;
- "show-env")
- show_env
- ;;
- "show-logs")
- show_logs
- ;;
- "show-status")
- show_status
- ;;
- "logs")
- start_mprocs
- ;;
- "help"|"-h"|"--help"|"")
- show_help
- ;;
- *)
- echo "Unknown command: $1"
- echo "Run '$0 help' for available commands"
- exit 1
- ;;
- esac
|