6.9 KiB
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
# Start regtest with SQLite database (default)
just regtest
# Or with REDB database
just regtest redb
The script will:
- Check for
mprocsand offer to install it if missing - Build necessary binaries
- Set up Bitcoin regtest + 4 Lightning nodes + 2 CDK mints
- Launch
mprocsTUI showing all component logs - 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 URLCDK_TEST_MINT_URL_2: LND mint URLCDK_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
# 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 <bolt11>
# Check balances and channels
just ln-cln1 listfunds
just ln-lnd1 listchannels
Bitcoin Operations
just btc getblockchaininfo # Blockchain status
just btc getbalance # Wallet balance
just btc-mine 5 # Mine 5 blocks
CDK Mint Operations
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 logscln-one: CLN node 1 logscln-two: CLN node 2 logslnd-one: LND node 1 logslnd-two: LND node 2 logs
Development Workflows
Testing Lightning Payment Flow
# Terminal 1: Start environment
just regtest
# Terminal 2: Create invoice and pay
just ln-cln1 invoice 1000 test "Test payment"
just ln-lnd1 payinvoice <bolt11_from_above>
just ln-cln1 listinvoices
just ln-lnd1 listpayments
Developing Mint Code
# 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
# 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
# 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:
# 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
# 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
justcommands 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_envfile exists - Verify environment variables are set:
echo $CDK_TEST_MINT_URL
Connection Issues
- Use
just regtest-statusto 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+Cin the original terminal to clean up - Restart with
just regtest-logs
Common Error Solutions
"Port already in use"
# Find and kill processes using ports
sudo lsof -ti:8085 | xargs kill -9
sudo lsof -ti:8087 | xargs kill -9
"Environment not found"
# Clean up and restart
rm -f /tmp/cdk_regtest_env
just regtest
"Binary not found"
# Rebuild binaries
just build
just regtest
This environment provides everything needed for CDK development and testing in a single, easy-to-use interface! 🎉