# CDK Regtest Environment Guide A comprehensive guide for setting up and using the CDK regtest environment for development and testing. ## Quick Start ### Start the Environment ```bash # Start regtest with SQLite database (default) just regtest # Or with REDB database just regtest redb ``` The script will: 1. Check for `mprocs` and offer to install it if missing 2. Build necessary binaries 3. Set up Bitcoin regtest + 4 Lightning nodes + 2 CDK mints 4. Launch `mprocs` TUI showing all component logs 5. Both mints start automatically ### Stop the Environment Press `q` in mprocs or `Ctrl+C` in the terminal. Everything cleans up automatically. ## Network Components When running, you get a complete Lightning Network environment: ### Bitcoin Network - **Bitcoin RPC**: `127.0.0.1:18443` (user: `testuser`, pass: `testpass`) ### Lightning Nodes - **CLN Node 1**: `$CDK_ITESTS_DIR/cln/one/regtest/lightning-rpc` - **CLN Node 2**: `$CDK_ITESTS_DIR/cln/two/regtest/lightning-rpc` - **LND Node 1**: `https://localhost:10009` - **LND Node 2**: `https://localhost:10010` ### CDK Mints - **CLN Mint**: `http://127.0.0.1:8085` (connected to CLN node 1) - **LND Mint**: `http://127.0.0.1:8087` (connected to LND node 2) ### Environment Variables Available in all terminals automatically: - `CDK_TEST_MINT_URL`: CLN mint URL - `CDK_TEST_MINT_URL_2`: LND mint URL - `CDK_ITESTS_DIR`: Temporary directory with all data ## Using the Environment All commands work from any terminal - they automatically find the running environment. ### Lightning Node Operations ```bash # Get node information just ln-cln1 getinfo just ln-cln2 getinfo just ln-lnd1 getinfo just ln-lnd2 getinfo # Create and pay invoices just ln-cln1 invoice 1000 label "Test payment" just ln-lnd1 payinvoice # Check balances and channels just ln-cln1 listfunds just ln-lnd1 listchannels ``` ### Bitcoin Operations ```bash just btc getblockchaininfo # Blockchain status just btc getbalance # Wallet balance just btc-mine 5 # Mine 5 blocks ``` ### CDK Mint Operations ```bash just mint-info # Show both mints' info just mint-test # Run integration tests just restart-mints # Recompile and restart mints just regtest-status # Check all components just regtest-logs # Show recent logs ``` ## mprocs TUI Interface The `mprocs` interface shows all component logs in real-time: ### Controls - **Arrow keys**: Navigate between processes - **Enter**: Focus on a process to see its output - **Tab**: Switch between process list and output view - **s**: Start a process (if stopped) - **k**: Kill a process - **r**: Restart a process - **PageUp/PageDown**: Scroll through logs - **?**: Show help - **q**: Quit and stop environment ### Process List - `cln-mint`: CDK mint connected to CLN (auto-started) - `lnd-mint`: CDK mint connected to LND (auto-started) - `bitcoind`: Bitcoin regtest node logs - `cln-one`: CLN node 1 logs - `cln-two`: CLN node 2 logs - `lnd-one`: LND node 1 logs - `lnd-two`: LND node 2 logs ## Development Workflows ### Testing Lightning Payment Flow ```bash # Terminal 1: Start environment just regtest # Terminal 2: Create invoice and pay just ln-cln1 invoice 1000 test "Test payment" just ln-lnd1 payinvoice just ln-cln1 listinvoices just ln-lnd1 listpayments ``` ### Developing Mint Code ```bash # Terminal 1: Keep regtest running just regtest # Terminal 2: After making code changes just restart-mints # Recompiles and restarts both mints just mint-info # Test the changes just mint-test # Run integration tests ``` ### Using CDK CLI Tools ```bash # Terminal 1: Start environment just regtest # Terminal 2: Use environment variables cargo run --bin cdk-cli -- --mint-url $CDK_TEST_MINT_URL mint-info cargo run --bin cdk-cli -- --mint-url $CDK_TEST_MINT_URL_2 mint-info ``` ### Direct API Testing ```bash # Query mint info directly curl $CDK_TEST_MINT_URL/v1/info | jq curl $CDK_TEST_MINT_URL/v1/keysets | jq # Test both mints curl http://127.0.0.1:8085/v1/info | jq curl http://127.0.0.1:8087/v1/info | jq ``` ## File Structure All components run in a temporary directory: ``` $CDK_ITESTS_DIR/ ├── bitcoin/ # Bitcoin regtest data ├── cln/ │ ├── one/ # CLN node 1 data │ └── two/ # CLN node 2 data ├── lnd/ │ ├── one/ # LND node 1 data │ │ ├── tls.cert │ │ └── data/chain/bitcoin/regtest/admin.macaroon │ └── two/ # LND node 2 data ├── cln_mint/ # CLN mint working directory ├── lnd_mint/ # LND mint working directory ├── start_cln_mint.sh # Mint startup scripts ├── start_lnd_mint.sh └── mprocs.yaml # mprocs configuration ``` ## Installation Requirements ### mprocs (TUI Interface) If not installed, the script will offer to install it: ```bash # Automatic installation during regtest setup just regtest # Manual installation cargo install mprocs # Or via package manager # Ubuntu/Debian: apt install mprocs # macOS: brew install mprocs ``` ### System Dependencies Managed automatically via Nix development shell: - Bitcoin Core - Core Lightning (CLN) - LND (Lightning Network Daemon) - Rust toolchain ## Advanced Usage ### Manual mprocs Launch ```bash # If you need to restart just the mprocs interface source /tmp/cdk_regtest_env just regtest-logs ``` ### Environment State The environment creates a state file at `/tmp/cdk_regtest_env` that: - Shares environment variables between terminals - Allows `just` commands to work from anywhere - Automatically cleaned up when environment stops ### Process Management From within mprocs: - Restart individual mints after code changes - Monitor specific component logs - Start/stop services for testing scenarios ## Troubleshooting ### Environment Not Starting - Check that ports are available: 8085, 8087, 18443, 19846, 19847, 10009, 10010 - Ensure the Nix development shell is active: `nix develop` - Check individual component logs in mprocs ### Helper Commands Not Working - Ensure the regtest environment is running - Check that `/tmp/cdk_regtest_env` file exists - Verify environment variables are set: `echo $CDK_TEST_MINT_URL` ### Connection Issues - Use `just regtest-status` to check component health - Check mint logs with `just regtest-logs` - Verify Lightning node status with `just ln-cln1 getinfo` ### mprocs Issues - If mprocs crashes, processes continue running - Use `Ctrl+C` in the original terminal to clean up - Restart with `just regtest-logs` ## Common Error Solutions ### "Port already in use" ```bash # Find and kill processes using ports sudo lsof -ti:8085 | xargs kill -9 sudo lsof -ti:8087 | xargs kill -9 ``` ### "Environment not found" ```bash # Clean up and restart rm -f /tmp/cdk_regtest_env just regtest ``` ### "Binary not found" ```bash # Rebuild binaries just build just regtest ``` This environment provides everything needed for CDK development and testing in a single, easy-to-use interface! 🎉