# ── Recipe: paid-access ────────────────────────────────────────────────────── # A paid hosted wallet backend: a one-time fee gates NEW wallet creation (existing # wallets and self-hosters bypass it). Non-custodial and pull-model — the backend # only READS invoice status; funds go straight to your own wallet. # # ⚠️ Charging a fee has operational + legal implications — see ../LEGAL_AND_OPS.md. # # Start from ../../.env.example and apply the lines below. openssl rand -hex 32 # for each secret. # ───────────────────────────────────────────────────────────────────────────── SERVER_HOST=127.0.0.1 SERVER_PORT=8080 # REQUIRED: replace with YOUR real https domain. The your-domain.example placeholder # is rejected at boot in production (Nostr identity is on by default). PUBLIC_API_URL=https://api.your-domain.example/api/v1 ENVIRONMENT=production DATABASE_URL=postgresql:///smirk?host=/var/run/postgresql JWT_SECRET= SEED_FINGERPRINT_PEPPER= REFRESH_TOKEN_PEPPER= IP_SALT= ALTCHA_HMAC_KEY= ADMIN_KEY_INTEGRITY_SECRET= # Pay-to-register: a settled invoice is required to create a new wallet. Compose # with PoW if you like (FEATURE_POW is the master switch; POW_REQUIRED alone is # inert). Returning wallets never pay again. FEATURE_POW=true POW_REQUIRED=true REGISTRATION_REQUIRE_INVITE=false REGISTRATION_REQUIRE_PAYMENT=true # Processor (BTCPay-compatible; also served by xmrcheckout / wowcheckout). Price # is fiat-denominated here (payable in any coin the processor offers). PAYMENT_PROVIDER=btcpay PAYMENT_PROVIDER_URL=https://pay.your-domain.example PAYMENT_STORE_ID= PAYMENT_API_KEY= PAYMENT_AMOUNT=5 PAYMENT_CURRENCY=USD PAYMENT_CONFIRMATIONS=1 PAYMENT_EXPIRES_MINUTES=60 WALLET_RESTORE_POLICY=bounded WALLET_MAX_RESTORE_DEPTH_DAYS=365 FEATURE_PRICES=true FEATURE_TIPS=false RELAY_ENABLED=false # ── Chains: enable ONLY what this recipe wires up ──────────────────────────── # FAIL-CLOSED RULE: in production, an ENABLED chain with no source configured makes # the server REFUSE TO BOOT. Every FEATURE_* chain defaults to true, so this recipe # turns off the chains it does not wire up. It wires up Monero + Wownero (the # XMR_/WOW_ blocks below); fill their *_LWS_ADMIN_KEY and it boots. To add BTC/LTC # (electrum URL) or GRIN (GRIN_OWNER_API_SECRET + wiring), configure the source # first, THEN flip its flag to true. FEATURE_XMR=true FEATURE_WOW=true FEATURE_BTC=false FEATURE_LTC=false FEATURE_GRIN=false # Chain endpoints — see ../../.env.example. XMR_LWS_URL= XMR_LWS_ADMIN_URL= XMR_LWS_ADMIN_KEY= XMR_DAEMON_URL= WOW_LWS_URL= WOW_LWS_ADMIN_URL= WOW_LWS_ADMIN_KEY= WOW_DAEMON_URL=