diff --git a/devenv.nix b/devenv.nix index 5315aca..b9e5faf 100644 --- a/devenv.nix +++ b/devenv.nix @@ -2,7 +2,7 @@ { # Project metadata - name = "lamassu-next"; + name = "bitspire-next"; # ============================================ # Languages @@ -65,7 +65,7 @@ services.postgres = { enable = true; - initialDatabases = [{ name = "lamassu_dev"; }]; + initialDatabases = [{ name = "bitspire_dev"; }]; listen_addresses = "127.0.0.1"; }; @@ -97,7 +97,7 @@ env = { RUST_BACKTRACE = "1"; - DATABASE_URL = "postgresql://localhost/lamassu_dev"; + DATABASE_URL = "postgresql://localhost/bitspire_dev"; # Nostr development relay NOSTR_RELAY_URL = "ws://localhost:7777"; @@ -130,7 +130,7 @@ # Wait for strfry echo -n "strfry relay: " - until docker exec lamassu-relay nc -z localhost 7777 2>/dev/null; do + until docker exec bitspire-relay nc -z localhost 7777 2>/dev/null; do echo -n "." sleep 2 done @@ -138,7 +138,7 @@ # Wait for bitcoind echo -n "bitcoind: " - until docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu getblockchaininfo >/dev/null 2>&1; do + until docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire getblockchaininfo >/dev/null 2>&1; do # pragma: allowlist secret echo -n "." sleep 2 done @@ -146,7 +146,7 @@ # Wait for LND echo -n "LND: " - until docker exec lamassu-lnd lncli --network=regtest getinfo >/dev/null 2>&1; do + until docker exec bitspire-lnd lncli --network=regtest getinfo >/dev/null 2>&1; do echo -n "." sleep 3 done @@ -154,7 +154,7 @@ # Wait for Alice's LND echo -n "LND (Alice): " - until docker exec lamassu-lnd-alice lncli --network=regtest getinfo >/dev/null 2>&1; do + until docker exec bitspire-lnd-alice lncli --network=regtest getinfo >/dev/null 2>&1; do echo -n "." sleep 3 done @@ -196,7 +196,7 @@ 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" + docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire -generate "$BLOCKS" # pragma: allowlist secret ''; # Start auto-miner (mines 1 block every 30 seconds) @@ -211,19 +211,19 @@ # Stop auto-miner auto-mine-stop.exec = '' echo "Stopping auto-miner..." - docker stop lamassu-miner 2>/dev/null || true - docker rm lamassu-miner 2>/dev/null || true + docker stop bitspire-miner 2>/dev/null || true + docker rm bitspire-miner 2>/dev/null || true echo "Auto-miner stopped." ''; # Connect to LND CLI lncli.exec = '' - docker exec -it lamassu-lnd lncli --network=regtest "$@" + docker exec -it bitspire-lnd lncli --network=regtest "$@" ''; # Connect to Bitcoin CLI btccli.exec = '' - docker exec -it lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu "$@" + docker exec -it bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire "$@" # pragma: allowlist secret ''; # Test relay connection @@ -234,7 +234,7 @@ # Connect to Alice's LND CLI (second node for testing payments) lncli-alice.exec = '' - docker exec -it lamassu-lnd-alice lncli --network=regtest "$@" + docker exec -it bitspire-lnd-alice lncli --network=regtest "$@" ''; # Setup Lightning channel between Alice and the main LND node @@ -243,46 +243,46 @@ echo "" # Get LND's pubkey and address - LND_INFO=$(docker exec lamassu-lnd lncli --network=regtest getinfo 2>/dev/null) + LND_INFO=$(docker exec bitspire-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 + docker exec bitspire-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') + ALICE_BALANCE=$(docker exec bitspire-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') + ALICE_ADDR=$(docker exec bitspire-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 + docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire sendtoaddress "$ALICE_ADDR" 5 # pragma: allowlist secret echo "Mining 6 blocks for confirmation..." - docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu -generate 6 >/dev/null + docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire -generate 6 >/dev/null # pragma: allowlist secret sleep 2 - ALICE_BALANCE=$(docker exec lamassu-lnd-alice lncli --network=regtest walletbalance 2>/dev/null | jq -r '.confirmed_balance') + ALICE_BALANCE=$(docker exec bitspire-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 + docker exec bitspire-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 + docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire -generate 6 >/dev/null # pragma: allowlist secret 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}' + docker exec bitspire-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." ''; @@ -294,14 +294,14 @@ exit 1 fi echo "Paying invoice from Alice's node..." - docker exec lamassu-lnd-alice lncli --network=regtest payinvoice --force "$1" + docker exec bitspire-lnd-alice lncli --network=regtest payinvoice --force "$1" ''; # Create invoice on Alice's node (for testing ATM payouts) alice-invoice.exec = '' AMOUNT=''${1:-1000} MEMO=''${2:-"Test invoice"} - docker exec lamassu-lnd-alice lncli --network=regtest addinvoice --amt="$AMOUNT" --memo="$MEMO" | jq -r '.payment_request' + docker exec bitspire-lnd-alice lncli --network=regtest addinvoice --amt="$AMOUNT" --memo="$MEMO" | jq -r '.payment_request' ''; # Fund ATM account in Lightning.Pub @@ -324,7 +324,7 @@ echo "" echo "Invoice created. Paying from Alice..." - docker exec lamassu-lnd-alice lncli --network=regtest payinvoice --force "$INVOICE" + docker exec bitspire-lnd-alice lncli --network=regtest payinvoice --force "$INVOICE" echo "" echo "ATM account funded with $AMOUNT sats!" @@ -334,14 +334,14 @@ test-setup.exec = '' echo "" echo "═══════════════════════════════════════════════════════════" - echo " Lamassu Next - Test Setup Validation" + echo " bitSpire - Test Setup Validation" echo "═══════════════════════════════════════════════════════════" echo "" # Mine a block to wake up LND sync (regtest quirk: LND reports # "not synced" when no blocks mined recently) echo "Mining block to sync nodes..." - docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu -generate 1 >/dev/null 2>&1 + docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire -generate 1 >/dev/null 2>&1 # pragma: allowlist secret sleep 1 echo "" @@ -362,19 +362,19 @@ echo "───────────────────────────────────────────────────────────" # Check containers - docker ps --format '{{.Names}}' | grep -q lamassu-relay + docker ps --format '{{.Names}}' | grep -q bitspire-relay check $? "strfry relay running" - docker ps --format '{{.Names}}' | grep -q lamassu-bitcoind + docker ps --format '{{.Names}}' | grep -q bitspire-bitcoind check $? "bitcoind running" - docker ps --format '{{.Names}}' | grep -q lamassu-lnd + docker ps --format '{{.Names}}' | grep -q bitspire-lnd check $? "LND running" - docker ps --format '{{.Names}}' | grep -q lamassu-lnd-alice + docker ps --format '{{.Names}}' | grep -q bitspire-lnd-alice check $? "LND Alice running" - docker ps --format '{{.Names}}' | grep -q lamassu-lightning-pub + docker ps --format '{{.Names}}' | grep -q bitspire-lightning-pub check $? "Lightning.Pub running" echo "" @@ -386,32 +386,32 @@ check $? "Nostr relay port open" # Check bitcoind RPC - docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu getblockchaininfo >/dev/null 2>&1 + docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire getblockchaininfo >/dev/null 2>&1 # pragma: allowlist secret check $? "Bitcoin RPC responding" # Check LND - docker exec lamassu-lnd lncli --network=regtest getinfo >/dev/null 2>&1 + docker exec bitspire-lnd lncli --network=regtest getinfo >/dev/null 2>&1 check $? "LND RPC responding" # Check Alice - docker exec lamassu-lnd-alice lncli --network=regtest getinfo >/dev/null 2>&1 + docker exec bitspire-lnd-alice lncli --network=regtest getinfo >/dev/null 2>&1 check $? "LND Alice RPC responding" echo "" echo "3. Blockchain State" echo "───────────────────────────────────────────────────────────" - BLOCKS=$(docker exec lamassu-bitcoind bitcoin-cli -regtest -rpcuser=lamassu -rpcpassword=lamassu getblockcount 2>/dev/null) + BLOCKS=$(docker exec bitspire-bitcoind bitcoin-cli -regtest -rpcuser=bitspire -rpcpassword=bitspire getblockcount 2>/dev/null) # pragma: allowlist secret [ "$BLOCKS" -ge 100 ] check $? "Block height >= 100 (current: $BLOCKS)" # Check LND synced - LND_SYNCED=$(docker exec lamassu-lnd lncli --network=regtest getinfo 2>/dev/null | jq -r '.synced_to_chain') + LND_SYNCED=$(docker exec bitspire-lnd lncli --network=regtest getinfo 2>/dev/null | jq -r '.synced_to_chain') [ "$LND_SYNCED" = "true" ] check $? "LND synced to chain" # Check Alice synced - ALICE_SYNCED=$(docker exec lamassu-lnd-alice lncli --network=regtest getinfo 2>/dev/null | jq -r '.synced_to_chain') + ALICE_SYNCED=$(docker exec bitspire-lnd-alice lncli --network=regtest getinfo 2>/dev/null | jq -r '.synced_to_chain') [ "$ALICE_SYNCED" = "true" ] check $? "LND Alice synced to chain" @@ -420,17 +420,17 @@ echo "───────────────────────────────────────────────────────────" # Check Alice has active channels - ALICE_CHANNELS=$(docker exec lamassu-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq '.channels | length') + ALICE_CHANNELS=$(docker exec bitspire-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq '.channels | length') [ "$ALICE_CHANNELS" -ge 1 ] check $? "Alice has active channels (count: $ALICE_CHANNELS)" # Check channel is active - ACTIVE_CHANNEL=$(docker exec lamassu-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq '.channels[0].active') + ACTIVE_CHANNEL=$(docker exec bitspire-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq '.channels[0].active') [ "$ACTIVE_CHANNEL" = "true" ] check $? "Channel is active" # Check Alice has outbound capacity - ALICE_LOCAL=$(docker exec lamassu-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq -r '.channels[0].local_balance // 0') + ALICE_LOCAL=$(docker exec bitspire-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq -r '.channels[0].local_balance // 0') [ "$ALICE_LOCAL" -ge 10000 ] check $? "Alice has outbound capacity ($ALICE_LOCAL sats)" @@ -439,12 +439,12 @@ echo "───────────────────────────────────────────────────────────" # Create test invoice on LND and pay from Alice - TEST_INVOICE=$(docker exec lamassu-lnd lncli --network=regtest addinvoice --amt=100 --memo="test-setup validation" 2>/dev/null | jq -r '.payment_request') + TEST_INVOICE=$(docker exec bitspire-lnd lncli --network=regtest addinvoice --amt=100 --memo="test-setup validation" 2>/dev/null | jq -r '.payment_request') if [ -n "$TEST_INVOICE" ]; then check 0 "Created 100 sat test invoice" # Pay it - PAY_RESULT=$(docker exec lamassu-lnd-alice lncli --network=regtest payinvoice --force "$TEST_INVOICE" 2>&1) + PAY_RESULT=$(docker exec bitspire-lnd-alice lncli --network=regtest payinvoice --force "$TEST_INVOICE" 2>&1) if echo "$PAY_RESULT" | grep -q "SUCCEEDED"; then check 0 "Payment Alice → LND succeeded" else @@ -478,7 +478,7 @@ # Create invoice on Alice (simulating customer's wallet) echo "1. Creating invoice on Alice's wallet..." - INVOICE=$(docker exec lamassu-lnd-alice lncli --network=regtest addinvoice --amt="$AMOUNT" --memo="E2E test" | jq -r '.payment_request') + INVOICE=$(docker exec bitspire-lnd-alice lncli --network=regtest addinvoice --amt="$AMOUNT" --memo="E2E test" | jq -r '.payment_request') echo " Invoice: ''${INVOICE:0:40}..." # Use test-pay.mjs to pay via Lightning.Pub @@ -490,7 +490,7 @@ echo "" echo "3. Verifying payment on Alice..." sleep 2 - PAID=$(docker exec lamassu-lnd-alice lncli --network=regtest listinvoices 2>/dev/null | jq '.invoices[-1].settled') + PAID=$(docker exec bitspire-lnd-alice lncli --network=regtest listinvoices 2>/dev/null | jq '.invoices[-1].settled') if [ "$PAID" = "true" ]; then echo " ✓ Payment received!" else @@ -507,15 +507,15 @@ echo "" echo "LND (Lightning.Pub's node):" - docker exec lamassu-lnd lncli --network=regtest getinfo 2>/dev/null | jq '{pubkey: .identity_pubkey, alias: .alias, channels: .num_active_channels, peers: .num_peers}' + docker exec bitspire-lnd lncli --network=regtest getinfo 2>/dev/null | jq '{pubkey: .identity_pubkey, alias: .alias, channels: .num_active_channels, peers: .num_peers}' echo "" echo "LND Alice (Payment source):" - docker exec lamassu-lnd-alice lncli --network=regtest getinfo 2>/dev/null | jq '{pubkey: .identity_pubkey, alias: .alias, channels: .num_active_channels, peers: .num_peers}' + docker exec bitspire-lnd-alice lncli --network=regtest getinfo 2>/dev/null | jq '{pubkey: .identity_pubkey, alias: .alias, channels: .num_active_channels, peers: .num_peers}' echo "" echo "Channel Details:" - docker exec lamassu-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq '.channels[] | {peer: .remote_pubkey[0:16], capacity, local: .local_balance, remote: .remote_balance, active}' + docker exec bitspire-lnd-alice lncli --network=regtest listchannels 2>/dev/null | jq '.channels[] | {peer: .remote_pubkey[0:16], capacity, local: .local_balance, remote: .remote_balance, active}' echo "" echo "Lightning.Pub Nostr pubkey:" @@ -533,7 +533,7 @@ enterShell = '' echo "" - echo " ⚡ Lamassu Next - Nostr-Native Lightning ATM" + echo " ⚡ bitSpire - Nostr-Native Lightning ATM" echo " ─────────────────────────────────────────────" echo " Node.js: $(node --version)" echo " Rust: $(rustc --version | cut -d' ' -f2)" diff --git a/docker/dev.sh b/docker/dev.sh index 25926a3..f47d42f 100755 --- a/docker/dev.sh +++ b/docker/dev.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Lamassu Next Development Environment +# bitSpire Development Environment # # Single command to manage the complete development stack: # - Regtest Bitcoin/Lightning network (from ~/dev/local/docker/regtest) @@ -67,7 +67,7 @@ success() { echo -e "${GREEN}✓${NC} $1"; } # Ensure state directory exists mkdir -p "$STATE_DIR" -# Get ATM pubkey from its private key +# Get ATM pubkey from its private key # pragma: allowlist secret get_atm_pubkey() { local env_file="$PROJECT_DIR/apps/machine/.env" if [[ ! -f "$env_file" ]]; then @@ -96,8 +96,8 @@ get_atm_pubkey() { get_local_ip() { # Allow explicit override via env var - if [[ -n "${LAMASSU_HOST_IP:-}" ]]; then - echo "$LAMASSU_HOST_IP" + if [[ -n "${BITSPIRE_HOST_IP:-}" ]]; then + echo "$BITSPIRE_HOST_IP" return fi @@ -146,7 +146,7 @@ lnd4_has_active_channels() { } is_lightning_pub_ready() { - docker logs lamassu-lightning-pub 2>&1 | grep -q "LightningPub listening" + docker logs bitspire-lightning-pub 2>&1 | grep -q "LightningPub listening" } get_lnd4_balance() { @@ -422,8 +422,8 @@ wait_for_lightning_pub() { local attempts=0 while ! is_lightning_pub_ready && [[ $attempts -lt 45 ]]; do # Check for errors - if docker logs lamassu-lightning-pub 2>&1 | grep -q "Error:"; then - local err=$(docker logs lamassu-lightning-pub 2>&1 | grep "Error:" | tail -1) + if docker logs bitspire-lightning-pub 2>&1 | grep -q "Error:"; then + local err=$(docker logs bitspire-lightning-pub 2>&1 | grep "Error:" | tail -1) error "Lightning.Pub error: $err" return 1 fi @@ -437,14 +437,14 @@ wait_for_lightning_pub() { return 0 else error "Lightning.Pub failed to start (timeout)" - docker logs lamassu-lightning-pub 2>&1 | tail -10 + docker logs bitspire-lightning-pub 2>&1 | tail -10 return 1 fi } extract_lightning_pub_info() { - local pubkey=$(docker logs lamassu-lightning-pub 2>&1 | grep -oP 'pubkey:\s*\K[a-f0-9]+' | tail -1) - local nprofile=$(docker logs lamassu-lightning-pub 2>&1 | grep -oP 'nprofile:\s*\K\S+' | tail -1) + local pubkey=$(docker logs bitspire-lightning-pub 2>&1 | grep -oP 'pubkey:\s*\K[a-f0-9]+' | tail -1) + local nprofile=$(docker logs bitspire-lightning-pub 2>&1 | grep -oP 'nprofile:\s*\K\S+' | tail -1) echo "$pubkey" > "$PUBKEY_FILE" echo "$nprofile" > "$NPROFILE_FILE" @@ -467,7 +467,7 @@ update_atm_env() { VITE_RELAY_URL=ws://localhost:7777 VITE_LIGHTNING_PUB_PUBKEY=$pubkey VITE_LIGHTNING_PUB_API_URL=http://localhost:1776 -VITE_ADMIN_TOKEN=lamassu-dev-admin-token +VITE_ADMIN_TOKEN=bitspire-dev-admin-token VITE_ATM_PRIVATE_KEY=f391a2c3fc734f443b0f685688a0441b5fb9805853c0023f570c5a3c6412b136 # Extension API (for LNURL-withdraw) @@ -486,7 +486,7 @@ EOF setup_atm_app() { # Use a fixed app name so we reuse the same app across restarts - local app_name="lamassu-atm-dev" + local app_name="bitspire-atm-dev" # Check if we already have valid app state if [[ -f "$APP_ID_FILE" ]]; then @@ -501,7 +501,7 @@ setup_atm_app() { local response=$(curl -s -X POST http://localhost:1776/api/admin/app/add \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer lamassu-dev-admin-token" \ + -H "Authorization: Bearer bitspire-dev-admin-token" \ -d "{\"name\":\"$app_name\",\"allow_user_creation\":true}" 2>/dev/null) if echo "$response" | grep -q '"status":"OK"'; then @@ -566,8 +566,8 @@ get_atm_balance() { } show_status() { - local pubkey=$(cat "$PUBKEY_FILE" 2>/dev/null || docker logs lamassu-lightning-pub 2>&1 | grep -oP 'pubkey:\s*\K[a-f0-9]+' | tail -1) - local nprofile=$(cat "$NPROFILE_FILE" 2>/dev/null || docker logs lamassu-lightning-pub 2>&1 | grep -oP 'nprofile:\s*\K\S+' | tail -1) + local pubkey=$(cat "$PUBKEY_FILE" 2>/dev/null || docker logs bitspire-lightning-pub 2>&1 | grep -oP 'pubkey:\s*\K[a-f0-9]+' | tail -1) + local nprofile=$(cat "$NPROFILE_FILE" 2>/dev/null || docker logs bitspire-lightning-pub 2>&1 | grep -oP 'nprofile:\s*\K\S+' | tail -1) local local_ip=$(get_local_ip) local lndconnect=$(generate_lndconnect 2>/dev/null || echo "") local lnd4_balance=$(get_lnd4_balance) @@ -575,7 +575,7 @@ show_status() { echo "" echo -e "${BOLD}╔═══════════════════════════════════════════════════════════════════╗${NC}" - echo -e "${BOLD}║ LAMASSU NEXT - DEVELOPMENT ENVIRONMENT ║${NC}" + echo -e "${BOLD}║ BITSPIRE - DEVELOPMENT ENVIRONMENT ║${NC}" echo -e "${BOLD}╚═══════════════════════════════════════════════════════════════════╝${NC}" echo "" @@ -663,7 +663,7 @@ cmd_up() { fi echo "" - log "Starting Lamassu development environment..." + log "Starting bitSpire development environment..." echo "" # 1. Start shared regtest if needed (not in standalone mode) @@ -696,7 +696,7 @@ cmd_up() { log "Using Lightning.Pub image: $image" - # 4. Start lamassu services + # 4. Start bitspire services export REGTEST_DATA_DIR="$REGTEST_DIR/data" export LIGHTNING_PUB_IMAGE="$image" export HOST_IP=$(get_local_ip) @@ -708,7 +708,7 @@ cmd_up() { echo "unified" > "$MODE_FILE" fi - log "Starting lamassu services..." + log "Starting bitspire services..." docker compose -f "$SCRIPT_DIR/$compose_file" up -d # 5. Wait for Lightning.Pub @@ -746,7 +746,7 @@ cmd_up() { cmd_down() { local compose_file=$(get_compose_file) - log "Stopping lamassu services..." + log "Stopping bitspire services..." docker compose -f "$SCRIPT_DIR/$compose_file" down 2>/dev/null || true if [[ "$1" == "--all" ]]; then @@ -757,7 +757,7 @@ cmd_down() { } cmd_reset() { - warn "This will delete all lamassu state (Lightning.Pub identity, ATM app, etc.)" + warn "This will delete all bitspire state (Lightning.Pub identity, ATM app, etc.)" read -p "Continue? [y/N] " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then @@ -782,7 +782,7 @@ cmd_logs() { } cmd_status() { - if ! docker ps --format '{{.Names}}' | grep -q lamassu-lightning-pub; then + if ! docker ps --format '{{.Names}}' | grep -q bitspire-lightning-pub; then error "Services not running. Start with: ./dev.sh up" exit 1 fi @@ -806,7 +806,7 @@ cmd_fund() { local lp_pubkey=$(cat "$PUBKEY_FILE") local env_file="$PROJECT_DIR/apps/machine/.env" - # Get ATM private key from .env + # Get ATM private key from .env # pragma: allowlist secret if [[ ! -f "$env_file" ]]; then error "ATM not configured. Run './dev.sh up' first." exit 1 @@ -952,7 +952,7 @@ cmd_atm() { fi # Check if services are running - if ! docker ps --format '{{.Names}}' | grep -q lamassu-lightning-pub; then + if ! docker ps --format '{{.Names}}' | grep -q bitspire-lightning-pub; then warn "Services not running. Start with: ./dev.sh up" read -p "Start services first? [Y/n] " -n 1 -r echo @@ -1013,7 +1013,7 @@ case "${1:-help}" in shift cmd_logs "$@" ;; - # Internal command for external orchestration (called by regtest-start --with-lamassu) + # Internal command for external orchestration (called by regtest-start --with-bitspire) _setup_after_start) if ! is_lightning_pub_ready; then wait_for_lightning_pub || exit 1 @@ -1041,7 +1041,7 @@ case "${1:-help}" in cmd_zeus ;; *) - echo "Lamassu Next Development Environment" + echo "bitSpire Development Environment" echo "" echo "Usage: $0 [options]" echo "" @@ -1069,7 +1069,7 @@ case "${1:-help}" in echo " --machine Launch ATM app after startup" echo "" echo "Environment variables:" - echo " LAMASSU_HOST_IP Override auto-detected LAN IP (for VPN/multi-NIC)" + echo " BITSPIRE_HOST_IP Override auto-detected LAN IP (for VPN/multi-NIC)" echo "" echo "Examples:" echo " $0 up # Start (uses shared regtest)" @@ -1082,6 +1082,6 @@ case "${1:-help}" in echo " $0 fund 200000 # Add 200k more sats" echo " $0 logs lightning-pub" echo " $0 reset && $0 up --fund # Fresh start with funding" - echo " LAMASSU_HOST_IP=192.168.1.50 $0 up # Override LAN IP" + echo " BITSPIRE_HOST_IP=192.168.1.50 $0 up # Override LAN IP" ;; esac diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 6a963a2..fa9860e 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -1,11 +1,11 @@ -# Lamassu Next Development Infrastructure +# bitSpire Development Infrastructure # Usage: docker compose -f docker-compose.dev.yml up -d services: # Private Nostr relay for ATM communication strfry: image: ghcr.io/hoytech/strfry:latest - container_name: lamassu-relay + container_name: bitspire-relay ports: - '7777:7777' volumes: @@ -25,7 +25,7 @@ services: # Bitcoin Core in regtest mode bitcoind: image: lncm/bitcoind:v27.0 - container_name: lamassu-bitcoind + container_name: bitspire-bitcoind volumes: - bitcoind-data:/data/.bitcoin environment: @@ -33,8 +33,8 @@ services: command: - -regtest - -server - - -rpcuser=lamassu - - -rpcpassword=lamassu + - -rpcuser=bitspire + - -rpcpassword=bitspire # pragma: allowlist secret - -rpcallowip=0.0.0.0/0 - -rpcbind=0.0.0.0 - -zmqpubrawblock=tcp://0.0.0.0:28332 @@ -51,8 +51,8 @@ services: 'CMD', 'bitcoin-cli', '-regtest', - '-rpcuser=lamassu', - '-rpcpassword=lamassu', + '-rpcuser=bitspire', + '-rpcpassword=bitspire', # pragma: allowlist secret 'getblockchaininfo', ] interval: 10s @@ -63,7 +63,7 @@ services: # LND Lightning node lnd: image: lightninglabs/lnd:v0.18.0-beta - container_name: lamassu-lnd + container_name: bitspire-lnd depends_on: bitcoind: condition: service_healthy @@ -76,8 +76,8 @@ services: - --bitcoin.regtest - --bitcoin.node=bitcoind - --bitcoind.rpchost=bitcoind:18443 - - --bitcoind.rpcuser=lamassu - - --bitcoind.rpcpass=lamassu + - --bitcoind.rpcuser=bitspire + - --bitcoind.rpcpass=bitspire # pragma: allowlist secret - --bitcoind.zmqpubrawblock=tcp://bitcoind:28332 - --bitcoind.zmqpubrawtx=tcp://bitcoind:28333 - --rpclisten=0.0.0.0:10009 @@ -104,7 +104,7 @@ services: # Using patched image with Kind 0 profile publishing support lightning-pub: image: lightning-pub-patched:latest - container_name: lamassu-lightning-pub + container_name: bitspire-lightning-pub depends_on: lnd: condition: service_healthy @@ -126,14 +126,14 @@ services: # Disable external liquidity provider for regtest - DISABLE_LIQUIDITY_PROVIDER=true # Admin token for HTTP API access (development only) - - ADMIN_TOKEN=lamassu-dev-admin-token + - ADMIN_TOKEN=bitspire-dev-admin-token restart: unless-stopped # Second LND node (Alice) for payment testing # This node can pay invoices to Lightning.Pub's LND lnd-alice: image: lightninglabs/lnd:v0.18.0-beta - container_name: lamassu-lnd-alice + container_name: bitspire-lnd-alice depends_on: bitcoind: condition: service_healthy @@ -146,8 +146,8 @@ services: - --bitcoin.regtest - --bitcoin.node=bitcoind - --bitcoind.rpchost=bitcoind:18443 - - --bitcoind.rpcuser=lamassu - - --bitcoind.rpcpass=lamassu + - --bitcoind.rpcuser=bitspire + - --bitcoind.rpcpass=bitspire # pragma: allowlist secret - --bitcoind.zmqpubrawblock=tcp://bitcoind:28332 - --bitcoind.zmqpubrawtx=tcp://bitcoind:28333 - --rpclisten=0.0.0.0:10009 @@ -174,7 +174,7 @@ services: # Mines 1 block every 30 seconds miner: image: alpine:latest - container_name: lamassu-miner + container_name: bitspire-miner depends_on: bitcoind: condition: service_healthy @@ -186,11 +186,11 @@ services: echo "Starting auto-miner (1 block every 30 seconds)..." while true; do # Create wallet if not exists - curl -s --user lamassu:lamassu --data-binary '{"jsonrpc":"1.0","method":"createwallet","params":["miner"]}' http://bitcoind:18443/ > /dev/null 2>&1 + curl -s --user bitspire:bitspire --data-binary '{"jsonrpc":"1.0","method":"createwallet","params":["miner"]}' http://bitcoind:18443/ > /dev/null 2>&1 # Mine a block - ADDR=$$(curl -s --user lamassu:lamassu --data-binary '{"jsonrpc":"1.0","method":"getnewaddress","params":[]}' http://bitcoind:18443/ | jq -r '.result // empty') + ADDR=$$(curl -s --user bitspire:bitspire --data-binary '{"jsonrpc":"1.0","method":"getnewaddress","params":[]}' http://bitcoind:18443/ | jq -r '.result // empty') if [ -n "$$ADDR" ]; then - curl -s --user lamassu:lamassu --data-binary "{\"jsonrpc\":\"1.0\",\"method\":\"generatetoaddress\",\"params\":[1,\"$$ADDR\"]}" http://bitcoind:18443/ > /dev/null + curl -s --user bitspire:bitspire --data-binary "{\"jsonrpc\":\"1.0\",\"method\":\"generatetoaddress\",\"params\":[1,\"$$ADDR\"]}" http://bitcoind:18443/ > /dev/null fi sleep 30 done @@ -201,17 +201,17 @@ services: # PostgreSQL for optional server-side state postgres: image: postgres:16-alpine - container_name: lamassu-postgres + container_name: bitspire-postgres ports: - '5432:5432' environment: - POSTGRES_DB: lamassu_dev - POSTGRES_USER: lamassu - POSTGRES_PASSWORD: lamassu_dev_password + POSTGRES_DB: bitspire_dev + POSTGRES_USER: bitspire + POSTGRES_PASSWORD: bitspire_dev_password # pragma: allowlist secret volumes: - postgres-data:/var/lib/postgresql/data healthcheck: - test: ['CMD-SHELL', 'pg_isready -U lamassu -d lamassu_dev'] + test: ['CMD-SHELL', 'pg_isready -U bitspire -d bitspire_dev'] interval: 10s timeout: 5s retries: 5 diff --git a/docker/docker-compose.regtest.yml b/docker/docker-compose.regtest.yml index 0ce54cd..43ca8a0 100644 --- a/docker/docker-compose.regtest.yml +++ b/docker/docker-compose.regtest.yml @@ -1,13 +1,13 @@ -# Lamassu Next - Regtest Integration +# bitSpire - Regtest Integration # -# This overlay connects lamassu-next services to the comprehensive regtest +# This overlay connects bitspire-next services to the comprehensive regtest # environment at ~/dev/local/docker/regtest # # Usage: # 1. Start regtest (minimal — only what LP needs): # cd ~/dev/local/docker/regtest && docker compose up -d bitcoind lnd-1 lnd-4 # -# 2. Start lamassu services: +# 2. Start bitspire services: # cd docker && docker compose -f docker-compose.regtest.yml up -d # # 3. Bootstrap (funds LND, opens channels, creates LP app): @@ -32,7 +32,7 @@ services: # Private Nostr relay for ATM communication strfry: image: ghcr.io/hoytech/strfry:latest - container_name: lamassu-relay + container_name: bitspire-relay ports: - '7777:7777' volumes: @@ -57,7 +57,7 @@ services: # Use LIGHTNING_PUB_IMAGE env var to specify image (default: lightning-pub-withdraw) lightning-pub: image: ${LIGHTNING_PUB_IMAGE:-lightning-pub-withdraw:latest} - container_name: lamassu-lightning-pub + container_name: bitspire-lightning-pub extra_hosts: - 'host.docker.internal:host-gateway' ports: @@ -80,7 +80,7 @@ services: # Disable external liquidity provider for regtest - DISABLE_LIQUIDITY_PROVIDER=true # Admin token for HTTP API access (development only) - - ADMIN_TOKEN=lamassu-dev-admin-token + - ADMIN_TOKEN=bitspire-dev-admin-token # Extension HTTP API URL (for LNURL callbacks from external wallets) # Use HOST_IP env var for your machine's LAN IP (required for phone wallets) - EXTENSION_SERVICE_URL=http://${HOST_IP:-localhost}:1777 @@ -101,7 +101,7 @@ services: # Keeps Lightning channels active during development miner: image: boltz/bitcoin-core:25.0 - container_name: lamassu-miner + container_name: bitspire-miner entrypoint: /bin/sh command: - -c @@ -132,17 +132,17 @@ services: # PostgreSQL for optional server-side state postgres: image: postgres:16-alpine - container_name: lamassu-postgres + container_name: bitspire-postgres ports: - '5432:5432' environment: - POSTGRES_DB: lamassu_dev - POSTGRES_USER: lamassu - POSTGRES_PASSWORD: lamassu_dev_password + POSTGRES_DB: bitspire_dev + POSTGRES_USER: bitspire + POSTGRES_PASSWORD: bitspire_dev_password # pragma: allowlist secret volumes: - postgres-data:/var/lib/postgresql/data healthcheck: - test: ['CMD-SHELL', 'pg_isready -U lamassu -d lamassu_dev'] + test: ['CMD-SHELL', 'pg_isready -U bitspire -d bitspire_dev'] interval: 10s timeout: 5s retries: 5 diff --git a/docker/regtest-bootstrap.sh b/docker/regtest-bootstrap.sh index f00ace1..ec1af77 100755 --- a/docker/regtest-bootstrap.sh +++ b/docker/regtest-bootstrap.sh @@ -4,7 +4,7 @@ # Prerequisites: # 1. Regtest running (minimal — only needs bitcoind + lnd-1 + lnd-4): # cd ~/dev/local/docker/regtest && docker compose up -d bitcoind lnd-1 lnd-4 -# 2. Lamassu services running: +# 2. bitSpire services running: # cd docker && docker compose -f docker-compose.regtest.yml up -d # # What this script does: @@ -59,7 +59,7 @@ lncli_4() { LP_URL="http://localhost:1776" LP_EXT_URL="http://localhost:1777" -ADMIN_TOKEN="lamassu-dev-admin-token" +ADMIN_TOKEN="bitspire-dev-admin-token" CHANNEL_SIZE=5000000 # 5M sats FUND_AMOUNT=10000 # 10k sats for LP app @@ -195,7 +195,7 @@ for i in $(seq 1 120); do fi if [ "$i" -eq 120 ]; then err "Lightning.Pub not ready after 120s" - err "Check: docker logs lamassu-lightning-pub" + err "Check: docker logs bitspire-lightning-pub" exit 1 fi sleep 1 diff --git a/docker/regtest.sh b/docker/regtest.sh index b8ab709..1c198a0 100755 --- a/docker/regtest.sh +++ b/docker/regtest.sh @@ -36,7 +36,7 @@ cmd_up() { echo -e "${CYAN}Starting regtest (bitcoind + lnd-1 + lnd-4)...${NC}" cd "$REGTEST_DIR" && docker compose up -d bitcoind lnd-1 lnd-4 - echo -e "${CYAN}Starting lamassu services...${NC}" + echo -e "${CYAN}Starting bitspire services...${NC}" docker compose -f "$COMPOSE_FILE" up -d echo -e "${CYAN}Running bootstrap...${NC}" @@ -44,7 +44,7 @@ cmd_up() { } cmd_down() { - echo -e "${CYAN}Stopping lamassu services...${NC}" + echo -e "${CYAN}Stopping bitspire services...${NC}" docker compose -f "$COMPOSE_FILE" down 2>/dev/null || true echo -e "${CYAN}Stopping regtest...${NC}" @@ -68,7 +68,7 @@ cmd_reset() { cmd_status() { echo -e "${CYAN}Containers:${NC}" - docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -E 'regtest|lamassu|NAMES' | sort + docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -E 'regtest|bitspire|NAMES' | sort PREFIX=$(detect_prefix) if [ -n "$PREFIX" ]; then @@ -92,9 +92,9 @@ cmd_status() { cmd_logs() { local svc="${1:-lp}" case "$svc" in - lp|lightning-pub) docker logs -f --tail 50 lamassu-lightning-pub ;; - relay|strfry) docker logs -f --tail 50 lamassu-relay ;; - miner) docker logs -f --tail 50 lamassu-miner ;; + lp|lightning-pub) docker logs -f --tail 50 bitspire-lightning-pub ;; + relay|strfry) docker logs -f --tail 50 bitspire-relay ;; + miner) docker logs -f --tail 50 bitspire-miner ;; lnd1|lnd-1) PREFIX=$(detect_prefix); docker logs -f --tail 50 "${PREFIX}-lnd-1-1" ;; lnd4|lnd-4) PREFIX=$(detect_prefix); docker logs -f --tail 50 "${PREFIX}-lnd-4-1" ;; bitcoind) PREFIX=$(detect_prefix); docker logs -f --tail 50 "${PREFIX}-bitcoind-1" ;; diff --git a/docker/start-with-regtest.sh b/docker/start-with-regtest.sh index b688e6e..93aff63 100755 --- a/docker/start-with-regtest.sh +++ b/docker/start-with-regtest.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Start lamassu-next development environment with comprehensive regtest +# Start bitspire-next development environment with comprehensive regtest # # This script: # 1. Connects to the regtest environment at ~/dev/local/docker/regtest @@ -37,10 +37,10 @@ CYAN='\033[0;36m' BOLD='\033[1m' NC='\033[0m' -log() { echo -e "${GREEN}[lamassu]${NC} $1"; } -warn() { echo -e "${YELLOW}[lamassu]${NC} $1"; } -error() { echo -e "${RED}[lamassu]${NC} $1"; } -info() { echo -e "${CYAN}[lamassu]${NC} $1"; } +log() { echo -e "${GREEN}[bitspire]${NC} $1"; } +warn() { echo -e "${YELLOW}[bitspire]${NC} $1"; } +error() { echo -e "${RED}[bitspire]${NC} $1"; } +info() { echo -e "${CYAN}[bitspire]${NC} $1"; } # Get local IP for external wallet access get_local_ip() { @@ -86,7 +86,7 @@ wait_for_lightning_pub() { local attempt=0 while [[ $attempt -lt $max_attempts ]]; do - if docker logs lamassu-lightning-pub 2>&1 | grep -q "LightningPub listening"; then + if docker logs bitspire-lightning-pub 2>&1 | grep -q "LightningPub listening"; then sleep 2 # Extra time for Nostr middleware return 0 fi @@ -95,18 +95,18 @@ wait_for_lightning_pub() { done error "Lightning.Pub failed to start within 60 seconds" - docker logs lamassu-lightning-pub 2>&1 | tail -20 + docker logs bitspire-lightning-pub 2>&1 | tail -20 return 1 } # Get Lightning.Pub nprofile from logs get_nprofile() { - docker logs lamassu-lightning-pub 2>&1 | grep -oP 'nprofile:\s*\K\S+' | tail -1 + docker logs bitspire-lightning-pub 2>&1 | grep -oP 'nprofile:\s*\K\S+' | tail -1 } # Get Lightning.Pub pubkey from logs get_pubkey() { - docker logs lamassu-lightning-pub 2>&1 | grep -oP 'pubkey:\s*\K[a-f0-9]+' | tail -1 + docker logs bitspire-lightning-pub 2>&1 | grep -oP 'pubkey:\s*\K[a-f0-9]+' | tail -1 } # Generate lndconnect URL for Zeus (using lnd-3 which has REST exposed) @@ -139,7 +139,7 @@ setup_atm_account() { # Create app local app_response=$(curl -s -X POST http://localhost:1776/api/admin/app/add \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer lamassu-dev-admin-token" \ + -H "Authorization: Bearer bitspire-dev-admin-token" \ -d '{"name":"atm-app","allow_user_creation":true}' 2>/dev/null) if echo "$app_response" | grep -q '"status":"OK"'; then @@ -171,7 +171,7 @@ show_connection_info() { echo "" echo -e "${BOLD}═══════════════════════════════════════════════════════════════${NC}" - echo -e "${BOLD} LAMASSU REGTEST ENVIRONMENT ${NC}" + echo -e "${BOLD} BITSPIRE REGTEST ENVIRONMENT ${NC}" echo -e "${BOLD}═══════════════════════════════════════════════════════════════${NC}" echo "" @@ -262,7 +262,7 @@ start() { export LIGHTNING_PUB_IMAGE="$image" export HOST_IP=$(get_local_ip) - log "Starting lamassu services..." + log "Starting bitspire services..." docker compose -f "$SCRIPT_DIR/docker-compose.regtest.yml" up -d # Wait for Lightning.Pub and setup @@ -277,7 +277,7 @@ start() { # Stop services stop() { - log "Stopping lamassu services..." + log "Stopping bitspire services..." docker compose -f "$SCRIPT_DIR/docker-compose.regtest.yml" down rm -f "$SCRIPT_DIR/.atm-app-token" "$SCRIPT_DIR/.atm-app-id" log "Services stopped." @@ -290,7 +290,7 @@ logs() { # Show status/connection info status() { - if ! docker ps --format '{{.Names}}' | grep -q lamassu-lightning-pub; then + if ! docker ps --format '{{.Names}}' | grep -q bitspire-lightning-pub; then error "Services not running. Start with: $0 start" exit 1 fi diff --git a/docker/strfry.conf b/docker/strfry.conf index e775670..30e6dc0 100644 --- a/docker/strfry.conf +++ b/docker/strfry.conf @@ -1,5 +1,5 @@ ## -## strfry configuration for Lamassu ATM development +## strfry configuration for bitSpire ATM development ## relay { @@ -10,7 +10,7 @@ relay { nofiles = 0 info { - name = "Lamassu Dev Relay" + name = "bitSpire Dev Relay" description = "Private Nostr relay for ATM development and testing" pubkey = "" contact = "" diff --git a/packages/nostr-client/dev/mock-machine.mjs b/packages/nostr-client/dev/mock-machine.mjs index 5aca755..152e30b 100644 --- a/packages/nostr-client/dev/mock-machine.mjs +++ b/packages/nostr-client/dev/mock-machine.mjs @@ -24,7 +24,7 @@ const RELAY_URL = 'ws://localhost:7777' // Relay URL for browser access (different from Docker internal strfry:7777) const BROWSER_RELAY_URL = 'ws://localhost:7777' const LIGHTNING_PUB_HTTP = 'http://localhost:1776' -const ADMIN_TOKEN = 'lamassu-dev-admin-token' +const ADMIN_TOKEN = 'bitspire-dev-admin-token' // Lightning.Pub pubkey - fetched dynamically from the ATM user's ndebit let LIGHTNING_PUB_PUBKEY = null diff --git a/packages/nostr-client/dev/test-debit.mjs b/packages/nostr-client/dev/test-debit.mjs index a82f9bb..c1861ac 100644 --- a/packages/nostr-client/dev/test-debit.mjs +++ b/packages/nostr-client/dev/test-debit.mjs @@ -28,7 +28,7 @@ if (!NDEBIT || !BOLT11) { console.log('') console.log('Example:') console.log(' # First create an invoice on Alice:') - console.log(' docker exec lamassu-lnd-alice lncli --network=regtest addinvoice --amt 1000') + console.log(' docker exec bitspire-lnd-alice lncli --network=regtest addinvoice --amt 1000') console.log('') console.log(' # Then test the debit:') console.log(' node test-debit.mjs ndebit1... lnbcrt...') diff --git a/packages/nostr-client/dev/test-pay.mjs b/packages/nostr-client/dev/test-pay.mjs index 6b817d4..4385322 100644 --- a/packages/nostr-client/dev/test-pay.mjs +++ b/packages/nostr-client/dev/test-pay.mjs @@ -10,13 +10,13 @@ const LIGHTNING_PUB_PUBKEY = const RELAY_URL = process.env.NOSTR_RELAY_URL || 'ws://localhost:7777' // Get a fresh invoice from Alice first: -// docker exec lamassu-lnd-alice lncli --network=regtest addinvoice --amt 1000 +// docker exec bitspire-lnd-alice lncli --network=regtest addinvoice --amt 1000 const TEST_INVOICE = process.argv[2] if (!TEST_INVOICE) { console.log('Usage: node test-pay.mjs ') console.log( - 'Generate invoice: docker exec lamassu-lnd-alice lncli --network=regtest addinvoice --amt 1000' + 'Generate invoice: docker exec bitspire-lnd-alice lncli --network=regtest addinvoice --amt 1000' ) process.exit(1) }