Skip to main content
Every number on this page is read out of a machine-written artifact under docs/status/, and every artifact names the command that produced it. Nothing here is typed by hand — if a claim and the code disagree, the artifact is the one telling the truth. Generated by npm run evidence:build from 12 artifact(s).

What this build does not claim

The four testnet accounts

Public keys only. These are what make fee sponsorship checkable rather than asserted: open any settled payment on stellar.expert and the transaction’s source and fee account is the FEEPAYER, never the payer — the payer appears only inside the Soroban authorization entry. That is the whole claim, and it takes two clicks to falsify. The FEEPAYER is also published live at https://stellarsight.xyz/health as feePayer.

Settlements, by why they exist

A settlement count means nothing without knowing what produced it. Every payment this repo generates is labeled at the moment it settles: An unlabeled hash renders as unlabeled, never as organic. The full map is docs/status/provenance.json; every hash with an explorer link is in TESTNET-TXS.md.

Coverage: scheme × asset × network

Acceptance criteria, as observed

Written by npm run verify:conformance -- --emit on 2026-10-10 12:58:27 UTC (commit b211e15), driving an unmodified @x402/fetch client — no STELLARSIGHT code on the payment path. Settled: 2bf4a54c7af24aa4ee032c73b84172a7d09fa71eb36fafcff8c94c5609e6b5a9 · 0.01 SXT · 6271ms end to end. Artifact: docs/status/conformance.json

The x402 repository’s own e2e suite

The RFP names this as a hard acceptance criterion: “a passing run of the x402 repo’s e2e suite for both networks”. This is the stellar:testnet half — stellar:pubnet is Tranche 3 work, so the other half is scheduled rather than skipped. 6/6 scenarios passed against https://stellarsight.xyz, on suite commit 6557149b1437. Every payment settled in Circle testnet USDC — not by choice but by construction: the suite’s Stellar route resolves its asset through @x402/stellar’s defaultMoneyConversion and offers no override, so a Stellar run is a USDC run. That also answers, on chain, the “any SEP-41 token, USDC by default” line in RFP 3.1 that this project had until now only claimed. What this run does not cover, stated here rather than left for a reader to find:
  • The seller and the payer are processes the harness spawns locally; it has no remote-seller mode, so the hosted seller at stellarsight.xyz is not on this path. What is exercised remotely is the facilitator.
  • Reaching a deployed facilitator at all requires a forwarding relay in e2e/facilitators/external-proxies/, which is gitignored upstream and therefore first-party. Ours is published at e2e-proxy/ so the run is auditable.
  • stellar:pubnet is Tranche 3. The RFP asks for both networks; this is the testnet half, and the other half is scheduled rather than skipped.
Upstream defects worked around:
  • x402-foundation/x402#3187 (open; fix PR #3228 unmerged): e2e/clients/typescript/client.ts derives EVM and SVM signers before branching on —families, so a Stellar-only run crashes without CLIENT_EVM_PRIVATE_KEY and a 64-byte CLIENT_SVM_PRIVATE_KEY. Both are unused decoys in this run.
Artifact: docs/status/upstream-e2e.json · relay source: e2e-proxy/

Rejection audit

The negative-path counterpart: every documented error path, driven for real, with the code and reason the caller actually received. A rejection that arrives without a non-empty reason fails this run even when its status code is right. node scripts/verify-rejections.mjs · 11/11 applicable path(s) behaved as documented Artifact: docs/status/rejections.json

Scripted batches

Breadth of settlement, run serially and labeled as scripted. Not a load test — LOAD-BASELINE.md already publishes what this stack does under concurrency, and it is the least flattering number in the repo.

What a settlement costs the Soroban host

Read back off the ledger from the transaction named below, and compared against the network’s live ConfigSetting entries — both sides fetched, neither typed. Regenerate with npm run evidence:footprint -- --emit; the nightly re-measures the payment it has just settled. Worst utilization 1.5% — about 66.7× headroom against the tightest per-transaction limit. Measured on 2bf4a54c7af2… in ledger 5,122,704. Memory is the one row without a measurement: Peak host memory is not recorded in the transaction envelope or result meta, so usage is unobserved. The per-transaction limit is reported for completeness.

Fee-payer runway

THREAT-MODEL.md T6: this deployment sponsors every buyer’s network fee from one account, so a drained fee-payer stops every settlement at once. Read straight off Horizon — balance, and burn from every transaction on the account over the trailing window, successful or not, since a fee is charged either way. Regenerate with npm run monitor:feepayer -- --emit; a scheduled workflow pages on a breach. Artifact: docs/status/feepayer.json

How fast discovery answers

Wall-clock from the measuring machine over the public internet to a parsed JSON body — network round-trip and CDN included, because that is what a caller experiences. A server-side timer would look better and mean less. Regenerate with npm run latency:discovery -- --emit. Worst uncached p95 is 305 ms across 25 samples per probe, 0 failed request(s). Uncached and cached are never averaged together. Uncached forces a CDN miss with a unique parameter per request so the function actually runs — that is the honest number. Cached repeats one URL, which is what a caller polling a hot query sees; it is reported because it is true and labelled because quoting it alone would be the flattering half of the measurement.

Interoperability: one client, two facilitators

The same unmodified withBazaar() client from @x402/extensions, pointed at this deployment and at another facilitator, with every accepts entry validated by @x402/core’s own PaymentRequirementsSchema. Regenerate with npm run verify:interop. One client parses both: yes. Every accepts entry validates on both sides: yes. The two catalogs are not expected to agree — one indexes EVM resources and the other Stellar ones — so what is measured is whether a single consumer can read both and construct a payment from either. Facilitators checked that do not serve the Bazaar discovery endpoint today:

Dependency licences

npm run audit:licenses enumerates the production dependency tree — 191 packages, workspaces included, dev dependencies excluded because they are not redistributed — and reads each declared licence out of the installed package.json. CI runs it with --strict, so an unknown licence fails the build alongside a copyleft one. 0 strong copyleft, 0 weak copyleft, 0 unknown across 191 packages. That is the check behind the architectural claim that this facilitator is self-hosted on @x402/stellar rather than built on the AGPL-3.0 OpenZeppelin Relayer — the licence argument is now a property of the installed tree, not a statement of intent.

Run it yourself

Against the hosted deployment, with nothing installed:
From a clean clone, ending in a real settled payment:
Then open any hash it prints on stellar.expert: the fee account is GC4E5Q6W…, the FEEPAYER — not the payer.