diff --git a/lamassu-next/devenv.nix b/lamassu-next/devenv.nix index 64180bf..a85c67c 100644 --- a/lamassu-next/devenv.nix +++ b/lamassu-next/devenv.nix @@ -102,7 +102,7 @@ NOSTR_RELAY_URL = "ws://localhost:7777"; # Lightning.Pub development - LIGHTNING_PUB_URL = "http://localhost:3000"; + LIGHTNING_PUB_URL = "http://localhost:1776"; # For Tauri PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig"; @@ -121,15 +121,163 @@ # Start infrastructure infra-up.exec = '' echo "Starting development infrastructure..." - docker-compose -f docker/docker-compose.dev.yml up -d - echo "Waiting for services..." - sleep 5 + docker compose -f docker/docker-compose.dev.yml up -d + echo "" + echo "Waiting for services to be healthy..." + echo "(This may take 30-60 seconds on first run)" + echo "" + + # Wait for strfry + echo -n "strfry relay: " + until docker exec lamassu-relay nc -z localhost 7777 2>/dev/null; do + echo -n "." + sleep 2 + done + echo " ready" + + # Wait for bitcoind + echo -n "bitcoind: " + until docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu getblockchaininfo >/dev/null 2>&1; do + echo -n "." + sleep 2 + done + echo " ready" + + # Wait for LND + echo -n "LND: " + until docker exec lamassu-lnd lncli --network=regtest getinfo >/dev/null 2>&1; do + echo -n "." + sleep 3 + done + echo " ready" + + # Wait for Alice's LND + echo -n "LND (Alice): " + until docker exec lamassu-lnd-alice lncli --network=regtest getinfo >/dev/null 2>&1; do + echo -n "." + sleep 3 + done + echo " ready" + + echo "" echo "Infrastructure ready!" - echo " - Nostr relay: ws://localhost:7777" - echo " - Lightning.Pub: http://localhost:3000" + echo " - Nostr relay: ws://localhost:7777" + echo " - Bitcoin RPC: localhost:18443 (regtest)" + echo " - LND gRPC: localhost:10009" + echo " - LND Alice gRPC: localhost:10010" + echo " - Lightning.Pub: http://localhost:1776" + echo " - PostgreSQL: localhost:5432" + echo "" + echo "Next steps:" + echo " 1. mine-blocks 101 # Fund the wallet (if first run)" + echo " 2. setup-channel # Open channel between Alice and LND" + echo "" + echo "Use 'infra-logs' to view logs, 'infra-status' to check status" ''; - infra-down.exec = "docker-compose -f docker/docker-compose.dev.yml down"; + infra-down.exec = '' + echo "Stopping development infrastructure..." + docker compose -f docker/docker-compose.dev.yml down + echo "Infrastructure stopped" + ''; + + infra-logs.exec = '' + docker compose -f docker/docker-compose.dev.yml logs -f "$@" + ''; + + infra-status.exec = '' + echo "Infrastructure Status:" + echo "" + docker compose -f docker/docker-compose.dev.yml ps + ''; + + # Mine regtest blocks (useful for testing) + mine-blocks.exec = '' + BLOCKS=''${1:-1} + echo "Mining $BLOCKS regtest block(s)..." + docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu -generate "$BLOCKS" + ''; + + # Connect to LND CLI + lncli.exec = '' + docker exec -it lamassu-lnd lncli --network=regtest "$@" + ''; + + # Connect to Bitcoin CLI + btccli.exec = '' + docker exec -it lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu "$@" + ''; + + # Test relay connection + relay-test.exec = '' + echo "Testing Nostr relay connection..." + echo '["REQ", "test", {"kinds": [0], "limit": 1}]' | websocat ws://localhost:7777 + ''; + + # Connect to Alice's LND CLI (second node for testing payments) + lncli-alice.exec = '' + docker exec -it lamassu-lnd-alice lncli --network=regtest "$@" + ''; + + # Setup Lightning channel between Alice and the main LND node + setup-channel.exec = '' + echo "Setting up Lightning channel between Alice and LND..." + echo "" + + # Get LND's pubkey and address + LND_INFO=$(docker exec lamassu-lnd lncli --network=regtest getinfo 2>/dev/null) + LND_PUBKEY=$(echo "$LND_INFO" | jq -r '.identity_pubkey') + echo "LND pubkey: $LND_PUBKEY" + + # Connect Alice to LND + echo "Connecting Alice to LND..." + docker exec lamassu-lnd-alice lncli --network=regtest connect "$LND_PUBKEY@lnd:9735" 2>/dev/null || true + + # Check if Alice has enough funds + ALICE_BALANCE=$(docker exec lamassu-lnd-alice lncli --network=regtest walletbalance 2>/dev/null | jq -r '.confirmed_balance') + echo "Alice's on-chain balance: $ALICE_BALANCE sats" + + if [ "$ALICE_BALANCE" -lt 1000000 ]; then + echo "" + echo "Alice needs funds. Getting new address..." + ALICE_ADDR=$(docker exec lamassu-lnd-alice lncli --network=regtest newaddress p2wkh | jq -r '.address') + echo "Alice's address: $ALICE_ADDR" + echo "" + echo "Sending 5 BTC to Alice..." + docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu sendtoaddress "$ALICE_ADDR" 5 + echo "Mining 6 blocks for confirmation..." + docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu -generate 6 >/dev/null + sleep 2 + ALICE_BALANCE=$(docker exec lamassu-lnd-alice lncli --network=regtest walletbalance 2>/dev/null | jq -r '.confirmed_balance') + echo "Alice's new balance: $ALICE_BALANCE sats" + fi + + # Open channel from Alice to LND (1M sats) + echo "" + echo "Opening 1M sat channel from Alice to LND..." + docker exec lamassu-lnd-alice lncli --network=regtest openchannel --node_key="$LND_PUBKEY" --local_amt=1000000 + + echo "" + echo "Mining 6 blocks to confirm channel..." + docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu -generate 6 >/dev/null + + sleep 3 + echo "" + echo "Channel status:" + docker exec lamassu-lnd-alice lncli --network=regtest listchannels | jq '.channels[] | {remote_pubkey, capacity, local_balance, remote_balance, active}' + echo "" + echo "Channel setup complete! Alice can now pay invoices to Lightning.Pub." + ''; + + # Pay an invoice from Alice's node + alice-pay.exec = '' + if [ -z "$1" ]; then + echo "Usage: alice-pay " + exit 1 + fi + echo "Paying invoice from Alice's node..." + docker exec lamassu-lnd-alice lncli --network=regtest payinvoice --force "$1" + ''; }; # ============================================ @@ -144,12 +292,25 @@ echo " Rust: $(rustc --version | cut -d' ' -f2)" echo " pnpm: $(pnpm --version)" echo "" - echo " Commands:" - echo " dev Start development servers" - echo " build Build all packages" - echo " test Run tests" - echo " infra-up Start Docker infrastructure" - echo " infra-down Stop Docker infrastructure" + echo " Development:" + echo " dev Start development servers" + echo " build Build all packages" + echo " test Run tests" + echo "" + echo " Infrastructure:" + echo " infra-up Start Docker services (strfry, bitcoind, LND, Lightning.Pub)" + echo " infra-down Stop Docker services" + echo " infra-status Show service status" + echo " infra-logs Follow service logs" + echo "" + echo " Bitcoin/Lightning:" + echo " btccli Bitcoin CLI (regtest)" + echo " lncli LND CLI (Lightning.Pub's node)" + echo " lncli-alice LND CLI (Alice's node for testing payments)" + echo " mine-blocks Mine regtest blocks (default: 1)" + echo " setup-channel Setup channel between Alice and LND" + echo " alice-pay Pay invoice from Alice's node" + echo " relay-test Test Nostr relay connection" echo "" ''; }