FACILITATOR_CONFIG and reads secrets through
named environment variables. The default self-hosted profile is
facilitator/config/self-hosted.yaml; the Railway profile is
facilitator/config/railway.yaml.
Minimal environment
Service and limits
Sponsor budgets are database-backed and shared by replicas:
Networks and assets
Each network declares an RPC endpoint, sponsor/channel source, allowed assets, scheme fee ceilings, and a maximum seller timeout:asset.contract is the binding value.
The checked-in testnet profile includes native XLM SAC and testnet USDC. Pubnet
is packaged but disabled until audited upto deployment, funded channels,
authentication, and measured pubnet fee ceilings are supplied.
Bazaar and discovery
Search profiles
The search worker is optional. The payment service boots without embeddings, reranking, pgvector, or external keys.partialResults.
Fixed security invariants
Operators cannot configure away payment correctness or security. These are fixed: signed asset, payer, recipient, network, contract, amount, maximum, facilitator, and settlement-ID binding; auth-tree validation; ledger-expiry ordering; record-then-enforcing simulation; enforcing fee gates; channel fencing; durable hash-before-send; transaction-hash polling; exact transfer orupto pull/pay/refund event checks; terminal zero settlement; hook
self/token-contract rejection; and pubnet development-funding prohibition.
Catalog invariants are also fixed: official schema validation, soft-drop
behavior, MCP identity as (resource.url, toolName), append-only versions and
payment options, and no in-place overwrite of another seller’s payTo.
Index operations
Run these commands fromfacilitator/: