# Production .env for the hosted-gateway swarm stack. # Copy to .env on the Hostinger host, chmod 600, and `docker stack deploy`. # DATABASE_URL, REDIS_*, BEE_API_URL are set in prod-stack.yaml — do NOT # override here (the stack file uses internal DNS names). # --- Auth --- JWT_SECRET_KEY=change-me-to-a-long-random-string GOOGLE_OAUTH_CLIENT_ID= # --- Operator wallet (the ONLY on-chain identity) --- # Holds xBZZ + xDAI for all tenants. Funded once at bootstrap. OPERATOR_PRIVATE_KEY=0x... GNOSIS_RPC_URL=https://rpc.gnosischain.com # --- T4T protocol contracts (Gnosis mainnet) --- REGISTRY_ADDRESS=0xf81121AAbc2F7261224BaDd0Ed871711e6D1371E ESCROW_ADDRESS=0x34Db8E014E71928f17E23eC1272B602582222c9c XBZZ_ADDRESS=0xdBF3Ea6F5beE45c02255B2c26a16F300502F68da # --- Bee node --- # Pin the batch explicitly. It used to be bought on first deploy and left to # the gateway to manage, which is how the outage happened: the batch fell # under minTtlDays, the gateway tried to renew it, the renewal cost more xBZZ # than the wallet held, and the throw took down every route that boots the # gateway context. Renewal now belongs to stamp-monitor, which has spend caps # and alerts; the gateway just uses the batch it is given. # # Must be set. An empty value here is what re-enables the path above. BEE_POSTAGE_BATCH_ID= BEE_STAMP_MANAGE=false BEE_STAMP_LABEL=hosted-gateway BEE_STAMP_TTL_DAYS=30 # Used by the Bee service itself (BEE_*_PASSWORD vars below): BEE_PASSWORD=change-me # --- Pricing --- MARKUP_BPS=2000 WELCOME_XBZZ_WEI=50000000000000000000 # --- Concurrency / server --- MAX_CONCURRENT_JOBS=200 LOG_LEVEL=info # --- Phase 2 (Stripe) — leave blank in v1 --- STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= # --- stamp-monitor --- # Bearer token for the monitor's dashboard and admin API. That UI can spend # xBZZ (manual top-up), so treat it as a spending credential, not a viewer # login. Generate with `openssl rand -hex 32`; never commit the real value. STAMP_MONITOR_ADMIN_TOKEN=change-me