"raio-core stays IO-free." That's the one rule.
If a change would make core depend on a network, a filesystem,
a clock, or a runtime, it belongs in a different crate. The trait seams
exist so you can add real capabilities — durable storage, transport,
settlement, scheme-specific QR profiles — without ever touching the root
of trust. core has no network, no filesystem, and no clock,
so it stays deterministic, runtime-agnostic, and trivially fuzzable.
LedgerStore
Persist the event-sourced ledger — durable today via pure-Rust redb; SQL/Postgres are welcome community crates.
KeyDirectory
Resolve an alias (or MSISDN) to an account — durable today via pure-Rust redb; SQL/Postgres are welcome community crates.
SettlementProvider
Move real money. The shipped impl is naive on purpose — production adapters (PAPSS / RTGS / mobile money) are BYO.
Transport Future
The inter-participant message bus, with ISO 20022 and GSMA Mobile Money adapters — the interoperability seam, not yet in v0.1.
Two QR standards, one currency-aware root.
Pix taught "scan to pay" with the BR Code; the interoperable sibling is
EMVCo QR. Both are EMV-style TLV with the same CRC-16/CCITT-FALSE checksum,
shipped as separate, self-contained codecs (no raio-core
dependency). Meanwhile Money carries integer minor units and
respects each currency's minor_scale() — the zero-decimal
CFA franc zones (XOF, XAF, UGX, RWF, GNF) are first-class, never forced
through a cents projection.