Three states are kept apart, because conflating them is how a demo ends up claiming something untrue:
- Proven — a test that has actually executed, or a run on devnet
- Written — code exists and compiles, but has never run
- Declared stub — deliberately not real, and labelled as such at every call site
Where it stands
The trust model
Proven, on devnet. Vault, voucher redemption with the signature verified by the precompile on a real validator, 128-slot replay window, timelocked withdrawal, conflict freeze, double-spend refused.Caveat: run with a software P-256 key, not StrongBox.
The ordinary sale
Written, and typechecked. Till, MWA wallet, Solana Pay, payment validation, day-book, balance, SPL collateral, onboarding.Caveat: never rendered. A dev-client build compiles the native side but does not embed the JS.
Trust Stake
Proven, on devnet. 17 curve tests off chain, ~19 on chain in LiteSVM, and
RiskConfig now live on a real validator with redeem_voucher exercised against its new account struct.Settlement
Ledger proven (39 tests) — double-entry, idempotent, reversible, reconcilable. Partner is a declared stub.
By component
The three things that block the most
1
Run the app on a handset
The one that blocks the most, now that the chain side is settled. The native build compiles, but a development client loads its JS from Metro — so nothing in either app has rendered. Every screen, every state transition and every native call is unverified at runtime.It answers three questions at once: does the JS bundle, does StrongBox behave on real hardware, and does MWA find a wallet.
2
Get a Privy app ID
Onboarding’s done-when is setup completed without ever seeing a key, and it cannot be demonstrated without one. The flow’s rules are tested; the SDK calls are typechecked and unexecuted. A build with no app ID runs and simply does not offer the phone route.
3
Settle the payout partner
No licensed partner has been signed. The ledger is real and the stub is honest, so the fork is cheap — but the real leg cannot be built against an API nobody has access to.
Decisions waiting on a person
Which launch currency, or which oracle
Which launch currency, or which oracle
Pyth publishes no NGN feed — 39 FX pairs, and the naira is not among them. Of the markets the plan names, Manila (PHP) is covered; Lagos is not.Either pick a covered launch currency, or source NGN from Switchboard or a commercial feed. Hermes also requires an API key for prices. Until one is settled, the till runs a configured rate and says so on screen.
k and the hard cap, together
k and the hard cap, together
The curve raises required reserve below ~500 hard cap needs $81,000 of stake to bind. Neither parameter can be fixed without the other.Both are
RiskConfig updates rather than redeploys.Whether to widen the conflict proof
Whether to widen the conflict proof
report_conflict only freezes on two vouchers at the same sequence. Successive sequences with inconsistent remaining_after do not trigger it, and that residual is what the insurance line prices.Accepting that pair as proof would shorten the window a compromised device keeps trading in. It changes the fraud model, so it is flagged rather than taken.What is deliberately not built
Named rather than discovered, because a named stub reads as confidence and a discovered one reads as spin:- Slashing. The freeze blocks the exit, so stake cannot walk away from a loss it backs — but nothing yet moves it to a reserve, because there is no reserve account. That is the other half of “first-loss capital”.
- The payout partner adapter. The interface exists; the implementation waits on sandbox access.
- An HTTP surface on
settle. It is a library the relay and the app will call, not a server. - Embedded-wallet recovery.
needs-recoveryis detected and reported;useRecoverEmbeddedWalletis not wired, so the retry on that screen will not clear it. It arises when a wallet has to be reconstructed on a new device, which is exactly the case a merchant who changes phones hits — so it is a gap with a date on it, not a permanent omission. - The offline transport. QR and NFC, cached enrolment and revocation lists, the offline queue — all week-3 work.