# Sentinel Node Tester — Environment Configuration # Copy to .env and fill in your values: cp .env.example .env # ⚠ COST WARNING: Each node test costs ~40 P2P for 1GB bandwidth. # Full audit of ~1000 nodes ≈ 700-800 P2P (~$2-3 USD). # Get P2P tokens via Osmosis DEX: https://app.osmosis.zone # Token name: P2P (chain denom: udvpn, 1 P2P = 1,000,000 udvpn) # ⚠ ADMIN: WireGuard requires Administrator (Windows) or sudo (macOS/Linux). # Without admin, only V2Ray nodes (~70%) will be testable. # Windows: launch via SentinelAudit.vbs (auto-elevates) # macOS/Linux: sudo node server.js # ─── REQUIRED ──────────────────────────────────────────────────────────────── # Your Sentinel wallet mnemonic (12 or 24 words) # Create one: https://wallet.sentinel.co or any Cosmos wallet (prefix: sent1) MNEMONIC=your twelve word mnemonic phrase goes here replace with real words # ─── Chain ─────────────────────────────────────────────────────────────────── # Primary RPC endpoint for broadcasting transactions RPC=https://rpc.sentinel.co:443 # Optional: comma-separated LCD fallback endpoints (used only if RPC fails) # LCD_ENDPOINTS=https://lcd.sentinel.co,https://api-sentinel.ezstaking.dev # Token denomination (do not change) DENOM=udvpn # Gas price (do not change) GAS_PRICE=0.2udvpn # ─── Audit behavior ────────────────────────────────────────────────────────── # Gigabytes per node session (1 = minimum, recommended for testing) GIGABYTES_PER_NODE=1 # Megabytes to download during speed test (10 = quick, 50 = thorough) TEST_MB=10 # Maximum nodes to test (0 = all online nodes, ~1000) MAX_NODES=0 # Delay between node tests in milliseconds NODE_DELAY_MS=5000 # Optional: comma-separated DNS servers used when probing nodes # DNS_SERVERS=1.1.1.1,8.8.8.8 # ─── Server ────────────────────────────────────────────────────────────────── # HTTP port PORT=3001 # Bind address. 127.0.0.1 = local only (default, safest). # Set to 0.0.0.0 to expose on the network — only do this with ADMIN_TOKEN set. LISTEN_HOST=127.0.0.1 # ─── Admin auth & public dashboard ─────────────────────────────────────────── # Set PUBLIC_MODE=true to expose a read-only public dashboard at /. # When PUBLIC_MODE=true you MUST also set ADMIN_TOKEN — the server will refuse # to start without it to prevent accidental open access to admin routes. # # Generate a strong token: openssl rand -hex 32 # Windows alternative: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" # # ⚠ This token also seeds the admin-session cookie HMAC. Rotating it logs out # every existing admin session. Use ≥32 bytes of entropy — short tokens # weaken cookie integrity, not just login auth. ADMIN_TOKEN= PUBLIC_MODE=false ADMIN_PATH=/admin # Set INSECURE_COOKIE=true to allow the admin session cookie over plain HTTP. # Default (false) issues Secure cookies — required when serving over HTTPS in # production. Only flip to true for local development on http://localhost. INSECURE_COOKIE=false # Set ENABLE_HSTS=true behind a TLS-terminating proxy to send a strict-transport # header on admin responses. Default off. ENABLE_HSTS=false # ─── Public-triggered test (optional, off by default) ──────────────────────── # When ALLOW_PUBLIC_TEST=true the public dashboard exposes a Start/Stop button # wired to a pre-configured plan or subscription. Leave disabled unless you # explicitly want unauthenticated visitors to be able to spend your wallet. ALLOW_PUBLIC_TEST=false PUBLIC_TEST_PLAN_ID= PUBLIC_TEST_SUB_ID= PUBLIC_TEST_SUB_GRANTER=