mirror of
https://github.com/aljazceru/cdk.git
synced 2026-01-18 12:25:32 +01:00
320
misc/interactive_regtest_mprocs.sh
Executable file
320
misc/interactive_regtest_mprocs.sh
Executable file
@@ -0,0 +1,320 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Interactive Regtest Environment for CDK with Direct Process Management
|
||||
# This script sets up mprocs to manage the mint processes directly
|
||||
|
||||
set -e
|
||||
|
||||
# Function to wait for HTTP endpoint
|
||||
wait_for_endpoint() {
|
||||
local url=$1
|
||||
local timeout=${2:-60}
|
||||
local start_time=$(date +%s)
|
||||
|
||||
while true; do
|
||||
local current_time=$(date +%s)
|
||||
local elapsed_time=$((current_time - start_time))
|
||||
|
||||
if [ $elapsed_time -ge $timeout ]; then
|
||||
echo "❌ Timeout waiting for $url"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local http_status=$(curl -o /dev/null -s -w "%{http_code}" "$url" 2>/dev/null || echo "000")
|
||||
|
||||
if [ "$http_status" -eq 200 ]; then
|
||||
echo "✓ $url is ready"
|
||||
return 0
|
||||
fi
|
||||
|
||||
sleep 2
|
||||
done
|
||||
}
|
||||
|
||||
# Function to perform cleanup
|
||||
cleanup() {
|
||||
echo "Cleaning up..."
|
||||
|
||||
# Remove state file for other sessions
|
||||
rm -f "/tmp/cdk_regtest_env"
|
||||
|
||||
if [ ! -z "$CDK_REGTEST_PID" ] && kill -0 $CDK_REGTEST_PID 2>/dev/null; then
|
||||
echo "Killing the cdk regtest"
|
||||
kill -2 $CDK_REGTEST_PID
|
||||
wait $CDK_REGTEST_PID
|
||||
fi
|
||||
|
||||
echo "Environment terminated"
|
||||
|
||||
# Remove the temporary directory
|
||||
if [ ! -z "$CDK_ITESTS_DIR" ]; then
|
||||
rm -rf "$CDK_ITESTS_DIR"
|
||||
echo "Temp directory removed: $CDK_ITESTS_DIR"
|
||||
fi
|
||||
|
||||
# Unset all environment variables
|
||||
unset CDK_ITESTS_DIR
|
||||
unset CDK_ITESTS_MINT_ADDR
|
||||
unset CDK_ITESTS_MINT_PORT_0
|
||||
unset CDK_ITESTS_MINT_PORT_1
|
||||
unset CDK_MINTD_DATABASE
|
||||
unset CDK_TEST_MINT_URL
|
||||
unset CDK_TEST_MINT_URL_2
|
||||
unset CDK_REGTEST_PID
|
||||
unset RUST_BACKTRACE
|
||||
unset CDK_TEST_REGTEST
|
||||
}
|
||||
|
||||
# Set up trap to call cleanup on script exit
|
||||
trap cleanup EXIT
|
||||
|
||||
export CDK_TEST_REGTEST=1
|
||||
|
||||
# Check for mprocs and offer to install if missing
|
||||
if ! command -v mprocs >/dev/null 2>&1; then
|
||||
echo "⚠️ mprocs not found - this tool is required for direct process management"
|
||||
echo "Install it with: cargo install mprocs"
|
||||
echo
|
||||
read -p "Would you like to install mprocs now? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Installing mprocs..."
|
||||
cargo install mprocs
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✓ mprocs installed successfully"
|
||||
else
|
||||
echo "❌ Failed to install mprocs."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "❌ mprocs is required for this mode. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
echo
|
||||
fi
|
||||
|
||||
# Parse command line arguments
|
||||
CDK_MINTD_DATABASE=${1:-"sqlite"} # Default to sqlite if not specified
|
||||
|
||||
# Create a temporary directory
|
||||
export CDK_ITESTS_DIR=$(mktemp -d)
|
||||
export CDK_ITESTS_MINT_ADDR="127.0.0.1"
|
||||
export CDK_ITESTS_MINT_PORT_0=8085
|
||||
export CDK_ITESTS_MINT_PORT_1=8087
|
||||
|
||||
# Check if the temporary directory was created successfully
|
||||
if [[ ! -d "$CDK_ITESTS_DIR" ]]; then
|
||||
echo "Failed to create temp directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=============================================="
|
||||
echo "Starting CDK Regtest with Direct Process Management"
|
||||
echo "=============================================="
|
||||
echo "Temp directory: $CDK_ITESTS_DIR"
|
||||
echo "Database type: $CDK_MINTD_DATABASE"
|
||||
echo
|
||||
|
||||
export CDK_MINTD_DATABASE="$CDK_MINTD_DATABASE"
|
||||
|
||||
# Build the necessary binaries
|
||||
echo "Building binaries..."
|
||||
cargo build -p cdk-integration-tests --bin start_regtest
|
||||
cargo build --bin cdk-mintd
|
||||
|
||||
echo "Starting regtest network (Bitcoin + Lightning nodes)..."
|
||||
cargo run --bin start_regtest &
|
||||
export CDK_REGTEST_PID=$!
|
||||
|
||||
# Create named pipe for progress tracking
|
||||
mkfifo "$CDK_ITESTS_DIR/progress_pipe"
|
||||
rm -f "$CDK_ITESTS_DIR/signal_received"
|
||||
|
||||
# Start reading from pipe in background
|
||||
(while read line; do
|
||||
case "$line" in
|
||||
"checkpoint1")
|
||||
echo "✓ Regtest network is ready"
|
||||
touch "$CDK_ITESTS_DIR/signal_received"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done < "$CDK_ITESTS_DIR/progress_pipe") &
|
||||
|
||||
# Wait for regtest setup (up to 120 seconds)
|
||||
echo "Waiting for regtest network to be ready..."
|
||||
for ((i=0; i<120; i++)); do
|
||||
if [ -f "$CDK_ITESTS_DIR/signal_received" ]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ ! -f "$CDK_ITESTS_DIR/signal_received" ]; then
|
||||
echo "❌ Timeout waiting for regtest network"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create work directories for mints
|
||||
mkdir -p "$CDK_ITESTS_DIR/cln_mint"
|
||||
mkdir -p "$CDK_ITESTS_DIR/lnd_mint"
|
||||
|
||||
# Set environment variables for easy access
|
||||
export CDK_TEST_MINT_URL="http://$CDK_ITESTS_MINT_ADDR:$CDK_ITESTS_MINT_PORT_0"
|
||||
export CDK_TEST_MINT_URL_2="http://$CDK_ITESTS_MINT_ADDR:$CDK_ITESTS_MINT_PORT_1"
|
||||
|
||||
# Create state file for other terminal sessions
|
||||
ENV_FILE="/tmp/cdk_regtest_env"
|
||||
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_REGTEST_PID=\"$CDK_REGTEST_PID\"" >> "$ENV_FILE"
|
||||
|
||||
# Get the project root directory (where justfile is located)
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
# Create environment setup scripts for mprocs to use
|
||||
cat > "$CDK_ITESTS_DIR/start_cln_mint.sh" << EOF
|
||||
#!/usr/bin/env bash
|
||||
cd "$PROJECT_ROOT"
|
||||
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
|
||||
export CDK_MINTD_DATABASE="$CDK_MINTD_DATABASE"
|
||||
|
||||
echo "Starting CLN Mint on port 8085..."
|
||||
echo "Project root: $PROJECT_ROOT"
|
||||
echo "Working directory: \$CDK_MINTD_WORK_DIR"
|
||||
echo "CLN RPC path: \$CDK_MINTD_CLN_RPC_PATH"
|
||||
echo "Database type: \$CDK_MINTD_DATABASE"
|
||||
echo "---"
|
||||
|
||||
exec cargo run --bin cdk-mintd
|
||||
EOF
|
||||
|
||||
cat > "$CDK_ITESTS_DIR/start_lnd_mint.sh" << EOF
|
||||
#!/usr/bin/env bash
|
||||
cd "$PROJECT_ROOT"
|
||||
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"
|
||||
export RUST_BACKTRACE=1
|
||||
export CDK_MINTD_DATABASE="$CDK_MINTD_DATABASE"
|
||||
|
||||
echo "Starting LND Mint on port 8087..."
|
||||
echo "Project root: $PROJECT_ROOT"
|
||||
echo "Working directory: \$CDK_MINTD_WORK_DIR"
|
||||
echo "LND address: \$CDK_MINTD_LND_ADDRESS"
|
||||
echo "Database type: \$CDK_MINTD_DATABASE"
|
||||
echo "---"
|
||||
|
||||
exec cargo run --bin cdk-mintd
|
||||
EOF
|
||||
|
||||
# Make scripts executable
|
||||
chmod +x "$CDK_ITESTS_DIR/start_cln_mint.sh"
|
||||
chmod +x "$CDK_ITESTS_DIR/start_lnd_mint.sh"
|
||||
|
||||
echo
|
||||
echo "=============================================="
|
||||
echo "🎉 CDK Regtest Environment is Ready!"
|
||||
echo "=============================================="
|
||||
echo
|
||||
echo "Network Information:"
|
||||
echo " • Bitcoin RPC: 127.0.0.1:18443 (user: testuser, pass: testpass)"
|
||||
echo " • CLN Node 1: $CDK_ITESTS_DIR/cln/one/regtest/lightning-rpc"
|
||||
echo " • CLN Node 2: $CDK_ITESTS_DIR/cln/two/regtest/lightning-rpc"
|
||||
echo " • LND Node 1: https://localhost:10009"
|
||||
echo " • LND Node 2: https://localhost:10010"
|
||||
echo
|
||||
echo "CDK Mints (will be managed by mprocs):"
|
||||
echo " • CLN Mint: $CDK_TEST_MINT_URL"
|
||||
echo " • LND Mint: $CDK_TEST_MINT_URL_2"
|
||||
echo
|
||||
echo "Files and Directories:"
|
||||
echo " • Working Directory: $CDK_ITESTS_DIR"
|
||||
echo " • Start Scripts: $CDK_ITESTS_DIR/start_{cln,lnd}_mint.sh"
|
||||
echo
|
||||
echo "Environment Variables (available in other terminals):"
|
||||
echo " • CDK_TEST_MINT_URL=\"$CDK_TEST_MINT_URL\""
|
||||
echo " • CDK_TEST_MINT_URL_2=\"$CDK_TEST_MINT_URL_2\""
|
||||
echo " • CDK_ITESTS_DIR=\"$CDK_ITESTS_DIR\""
|
||||
echo
|
||||
echo "Starting mprocs with direct process management..."
|
||||
echo
|
||||
echo "In mprocs you can:"
|
||||
echo " • 's' to start a process"
|
||||
echo " • 'k' to kill a process"
|
||||
echo " • 'r' to restart a process"
|
||||
echo " • 'Enter' to focus on a process"
|
||||
echo " • 'q' to quit and stop the environment"
|
||||
echo "=============================================="
|
||||
|
||||
# Wait a moment for everything to settle
|
||||
sleep 2
|
||||
|
||||
# Create mprocs configuration with direct process management
|
||||
MPROCS_CONFIG="$CDK_ITESTS_DIR/mprocs.yaml"
|
||||
cat > "$MPROCS_CONFIG" << EOF
|
||||
procs:
|
||||
cln-mint:
|
||||
shell: "$CDK_ITESTS_DIR/start_cln_mint.sh"
|
||||
autostart: true
|
||||
env:
|
||||
CDK_ITESTS_DIR: "$CDK_ITESTS_DIR"
|
||||
CDK_MINTD_DATABASE: "$CDK_MINTD_DATABASE"
|
||||
|
||||
lnd-mint:
|
||||
shell: "$CDK_ITESTS_DIR/start_lnd_mint.sh"
|
||||
autostart: true
|
||||
env:
|
||||
CDK_ITESTS_DIR: "$CDK_ITESTS_DIR"
|
||||
CDK_MINTD_DATABASE: "$CDK_MINTD_DATABASE"
|
||||
|
||||
bitcoind:
|
||||
shell: "while [ ! -f $CDK_ITESTS_DIR/bitcoin/regtest/debug.log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/bitcoin/regtest/debug.log"
|
||||
autostart: true
|
||||
|
||||
cln-one:
|
||||
shell: "while [ ! -f $CDK_ITESTS_DIR/cln/one/debug.log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/cln/one/debug.log"
|
||||
autostart: true
|
||||
|
||||
cln-two:
|
||||
shell: "while [ ! -f $CDK_ITESTS_DIR/cln/two/debug.log ]; do sleep 1; done && tail -f $CDK_ITESTS_DIR/cln/two/debug.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
|
||||
keymap_procs:
|
||||
toggle_process: 's'
|
||||
kill_process: 'k'
|
||||
restart_process: 'r'
|
||||
focus_process: 'Enter'
|
||||
show_keymap: '?'
|
||||
EOF
|
||||
|
||||
# Start mprocs with direct process management
|
||||
echo "Starting mprocs..."
|
||||
cd "$CDK_ITESTS_DIR"
|
||||
mprocs --config "$MPROCS_CONFIG"
|
||||
421
misc/regtest_helper.sh
Executable file
421
misc/regtest_helper.sh
Executable file
@@ -0,0 +1,421 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user