The correct order to set up a complete regtest drivechain environment.
bip300301_enforcer — built and availablegrpcurl installed (for gRPC calls): brew install grpcurlchmod +x scripts/regtest/*.shScript: scripts/regtest/1_start_mainchain.sh
./scripts/regtest/1_start_mainchain.sh
This starts Bitcoin Core regtest on port 18443, creates the mainchain wallet, and mines initial blocks to mature coinbase.
Script: scripts/regtest/2_start_parentchain.sh
./scripts/regtest/2_start_parentchain.sh
Starts a separate Bitcoin Core regtest on port 18444 for swap transactions. Only needed if you're testing swap functionality.
Script: scripts/regtest/3_start_enforcer.sh
./scripts/regtest/3_start_enforcer.sh
Starts the BIP300301 enforcer, connects to mainchain via RPC and ZMQ, creates the sidechain proposal, and mines 6 blocks for activation.
The enforcer must be running before you can create/unlock the wallet or mine blocks.
Script: scripts/regtest/create_enforcer_wallet.sh
# Unencrypted wallet (easiest for testing)
./scripts/regtest/create_enforcer_wallet.sh ""
# Encrypted wallet
./scripts/regtest/create_enforcer_wallet.sh "mypassword"
Creates a new enforcer wallet with a mnemonic. Skip if the enforcer was started with --wallet-auto-create.
Script: scripts/regtest/unlock_enforcer_wallet.sh
./scripts/regtest/unlock_enforcer_wallet.sh ""
Required before mining or creating transactions. Run after every enforcer restart.
Script: scripts/regtest/fund_enforcer_wallet.sh
# Send 1 BTC (default)
./scripts/regtest/fund_enforcer_wallet.sh
# Custom amount
./scripts/regtest/fund_enforcer_wallet.sh 5.0
Only needed for creating deposit transactions. Not required for mining blocks.
Script: scripts/regtest/mine_with_enforcer.sh
# Mine 1 block
./scripts/regtest/mine_with_enforcer.sh
# Mine 5 blocks, ACK all proposals
./scripts/regtest/mine_with_enforcer.sh 5 true
# 1. Start mainchain
./scripts/regtest/1_start_mainchain.sh
# 2. Start enforcer
./scripts/regtest/3_start_enforcer.sh
# 3. Create wallet
./scripts/regtest/create_enforcer_wallet.sh ""
# 4. Unlock wallet
./scripts/regtest/unlock_enforcer_wallet.sh ""
# 5. Mine blocks
./scripts/regtest/mine_with_enforcer.sh 10
# 6. (Optional) Fund wallet for deposits
./scripts/regtest/fund_enforcer_wallet.sh 1.0
1_start_mainchain.sh
← (no dependencies)
2_start_parentchain.sh
← (no dependencies, optional)
3_start_enforcer.sh
← Requires: mainchain running
create_enforcer_wallet.sh
← Requires: enforcer running
unlock_enforcer_wallet.sh
← Requires: enforcer running + wallet exists
fund_enforcer_wallet.sh
← Requires: mainchain + enforcer + wallet unlocked
mine_with_enforcer.sh
← Requires: enforcer + wallet unlocked
# Mainchain address
./scripts/regtest/generate_addresses.sh
# Parentchain address
./scripts/regtest/generate_addresses.sh parentchain
# Both chains
./scripts/regtest/generate_addresses.sh both
# From mainchain
./scripts/regtest/send_from.sh mainchain <address> 1.0
# From parentchain
./scripts/regtest/send_from.sh parentchain <address> 0.5
# Initialize all three users
./scripts/regtest/init_coinshift_app.sh ./test-users all
# Start each user's app
./test-users/alice/start.sh # RPC 6010 / P2P 4010
./test-users/bob/start.sh # RPC 6020 / P2P 4020
./test-users/charles/start.sh # RPC 6030 / P2P 4030
1_start_mainchain.sh first3_start_enforcer.sh and wait for startupunlock_enforcer_wallet.sh with the correct passwordfund_enforcer_wallet.shpkill -f bitcoind
pkill -f bip300301_enforcer