Docs menu

Conformance

Synfin is an open standard, so "conformant" has to mean something specific. This page states exactly what is checked today and what is not yet, no badge that outruns its evidence.

What conformance checks today

The conformance runners are property-based and check the standard's in-process ports, the shapes and invariants an implementation must honor, before anything claims to be Synfin-conformant:

  • Adapter conformance (runAdapterConformance): a VenueAdapter must declare a settlement mode the spec recognizes, quote deterministically, keep its venueId consistent, and reject malformed amounts and assets rather than invent a quote.
  • Router conformance (runRouterConformance): the routing port must rank and select venues to the spec's rules over adversarial inputs.

These runners are how the reference implementation keeps itself honest. They throw on the first violation, so they drop into any test runner.

What conformance does NOT check yet

Stated plainly, so the meaning is not overstated:

  • The runners verify in-process ports, not the live hosted API. A green in-process result does not by itself assert that a given deployment's /api/* surface conforms.
  • The standalone @synfin/conformance npm package is deprecated (Synfin is now a hosted API). Do not build an integration around installing it.

The roadmap: live-API conformance

The trust artifact an integrator will point at is a live-API conformance runner that exercises a deployment's real endpoints against the published contract (/openapi/v1.yaml): the x-synfin-api-version header, the response schemas, the { error, code, action? } error shape, and the on-ledger guarantees (the memo floor enforced, not just disclosed). When that ships, a green result will assert "this deployment conforms," which is the claim worth making. Until then, the honest statement is the one on this page.

What you can rely on now

Independent of the conformance runner, these hold on the live API today and are the guarantees to build against:

  • On-ledger minimum. minReceive is computed server-side and enforced on-ledger via the deposit memo; a bad quote aborts and funds never leave the wallet.
  • Non-custodial. Synfin holds no keys and drives no ledger; your wallet signs and sends.
  • Stable contract. The wire is versioned (x-synfin-api-version) and documented in /openapi/v1.yaml; the API reference is generated from it.