Phase 1 of the docs-by-domain reorg. Every snapshot now carries YAML frontmatter (domain + summary + tags); the auto-guess was hand-corrected against the full index (T6/interchain -> cross-chain, CDP/MBA/stablecoin -> fiatm, CitizenToken/Ballot -> governance, etc.). No file renamed/moved. build-snapshot-index.mjs now reads the frontmatter and emits a greppable INDEX.md: a top Quick-find table (No | domain | tags | summary) plus per-domain sections with summary + tags. 224/224 tagged, 8 domains, zero uncategorised. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
16 KiB
| domain | summary | tags |
|---|---|---|
| fiatm | catalytic-converter mini + scale tests — hypothesis validates | catalytic |
Snapshot 0161: catalytic-converter mini + scale tests — hypothesis validates
Captured 2026-06-14T06:50:33.260Z
Git state
- Rev:
e7f867f - Working tree:
M .gitignore
RM Parameters/usdm_complete-design_FOR-design-record.md -> Parameters/FIATm/fiatm_complete-design_FOR-design-record.md
R Parameters/usdm-and-market_diagram-report.html -> Parameters/FIATm/usdm-and-market_diagram-report.html
RM Parameters/usdm_sound-money-note_FOR-design-record.md -> Parameters/FIATm/usdm_sound-money-note_FOR-design-record.md
M scripts/merchant-pos-checkout-demo.mjs
M shells/app/src/App.tsx
M shells/app/src/components/TabBar.tsx
M shells/app/src/devWalletPicker.ts
M shells/app/src/qr/qr-uri.ts
M shells/app/src/screens/AssetDetail.tsx
D shells/app/src/screens/AssetsScreen.tsx
D shells/app/src/screens/ElevationFlow.tsx
M shells/app/src/screens/MainScreen.tsx
M shells/app/src/shell.css
M src/merchant-pos/index.ts
M wiki/index.md
M wiki/sound-money-primer.md
?? .calibration-sweep.json
?? .catalytic-sweep.json
?? Parameters/FIATm/README.md
?? Parameters/FIATm/catalytic-converter-hypothesis_FOR-testing.md
?? scripts/chipnet-fiatm-hyperinflation-test.mjs
?? scripts/chipnet-fiatm-multi-redeem.mjs
?? scripts/sim-fiatm-catalytic-mini.mjs
?? scripts/sim-fiatm-catalytic-scale.mjs
?? scripts/sim-fiatm-historical.mjs
?? scripts/sim-fiatm-trajectory.mjs
?? scripts/sim-usdm-calibration-sweep.mjs
?? shells/app/src/core/assetClass.ts
?? shells/app/src/hooks/
?? shells/app/src/screens/AgoraScreen.tsx
?? snapshots/0155-fiatm-design-record-promoted-to-family-l.md
?? snapshots/0156-shell-agora-propagation-tierb-retired-ad.md
?? snapshots/0157-fiatm-multi-redeem-chipnet-experiment.md
?? snapshots/0158-usdm-22-calibration-sweep-first-cut.md
?? snapshots/0159-fiatm-hyperinflating-currency-backtests-.md
?? snapshots/0160-arsm-trym-chipnet-live-multi-state-traje.md
File counts
| Area | Files |
|---|---|
| src/ | 78 |
| contracts/ | 115 |
| test/ | 57 |
Scope
First simulation test of the catalytic-converter hypothesis
(Parameters/FIATm/catalytic-converter-hypothesis_FOR-testing.md, written this session).
User-directed mini test first, then scale test across the parameter space. The hypothesis
extends §7b's "rate-correction lag is a catch-up opportunity for late entrants" up one
level to a systemic claim: the lag absorbs speculation noise; arbitrage closes the gap
with real BCH settlement; the net effect converts counterfeit-volume into real on-chain
demand.
What shipped
Mini test — scripts/sim-fiatm-catalytic-mini.mjs
A synthetic FIATm currency (TESTm) at chipnet scale: atomic 1,000 sats per face unit,
reservoir capped at 0.2 BCH (20,000 face units), against a paired BCH/USD crash from $500
→ $250 over 144 blocks. Mature §12 controller end-state values (N_down=144, d_down=0.05)
— the regime where the lag is real and the catalytic mechanism is expected to operate.
Offchain market: 0.2 BCH offered at the crashed price, with linear price-recovery as the BCH is consumed. Arbitrage activates at gap > 1% with a per-block speed cap.
Comparison: WITH-arb vs WITHOUT-arb (null model uses a 30-day half-life natural recovery to crashed-price baseline) at the end of a 14-day recovery window.
Results (mini test):
| metric | WITH arb | WITHOUT arb | difference |
|---|---|---|---|
| BCH/USD end of window | $475 (−5%) | $319 (−36%) | +$156 / +31 pp recovery |
| Offchain BCH consumed | 0.18 (90%) | 0.00 | +0.18 |
| FIATm face minted | 17,221 (86% of reservoir) | 0 | +17,221 |
| BCH locked into FIATm backing | 0.18 BCH | 0 | +0.18 |
| Arbitrageur USD profit | $21.42 | $0 | +$21.42 |
| Controller updates fired | 2 | 15 | (fewer needed; arb closed the gap) |
Mini-test interpretation. The lag opened a 100% gap during the crash; arbitrage closed the gap by consuming offchain BCH and minting FIATm at the lagged rate; the BCH ended up locked inside FIATm backing rather than transferred to anonymous buyers. Speculation- driven crash volume was converted to real on-chain settlement, with the BCH price ending 31 percentage points shallower in its drawdown. First direct evidence that the hypothesis mechanism works as described — under the stated assumptions.
Scale test — scripts/sim-fiatm-catalytic-scale.mjs
Parameter sweep across 192 cases (4 reservoirs × 4 offchain ratios × 3 crash sizes × 4 adoption levels), 61 ms wall time. Each case runs paired WITH/WITHOUT-arb sims and reports the catalytic strength (BCH-recovery percentage-point delta) plus per-case absorption / reservoir depletion / arb profit.
Scale-test headlines:
- Mean catalytic strength across 192 cases: +16.2 pp recovery vs null.
- 75% of cases (144/192) show a meaningful catalytic effect (>1 pp recovery).
- 63% of cases (120/192) show strong catalytic effect (>10 pp recovery).
- Best case: 49.9 pp recovery (chipnet-scale, matched offchain, deep crash, high adoption).
- Worst case: −6.0 pp (mechanism inverts when reservoir is critically undersized vs offchain).
Per-parameter findings (the structural insights):
| parameter | values | mean catalytic strength | finding |
|---|---|---|---|
| Reservoir size | 0.2, 2, 20, 200 BCH | all +16.2 pp (identical) | SCALE-INVARIANT. The chipnet 0.2 BCH case produces the same mean delta as the 200 BCH mainnet case (when offchain scales proportionally). The mechanism is BCH-side, not size-side — matches the §12 design intent. |
| Offchain ratio | 0.5× / 1× / 2× / 5× of reservoir | +29.0 / +26.3 / +12.6 / −3.0 pp | Critical lever. When the offchain crash volume exceeds 2× the FIATm reservoir, the converter saturates and at 5× the mechanism inverts — the partial absorption fails to support BCH enough to beat the null's slow natural recovery. Reservoir sizing must anticipate the crash volume it's expected to absorb. |
| Crash magnitude | −20% / −50% / −80% | +6.6 / +16.5 / +25.6 pp | Bigger crashes open bigger gaps → more arbitrage → more conversion. Confirms hypothesis Prediction 1 indirectly (arb volume scales with gap depth). |
| Adoption (arb speed cap) | 0.05% / 0.2% / 1% / 5% per block | +11.4 / +17.2 / +17.7 / +18.6 pp | Monotonic with diminishing returns above ~1%/block. Confirms hypothesis Prediction 3 (adoption-conditional catalysis). |
Sweep output written to .catalytic-sweep.json for downstream analysis.
Predictions resolved (against hypothesis doc)
| # | Prediction | Status |
|---|---|---|
| P1 | Arbitrage volume scales with gap depth | Indirectly confirmed via the crash-magnitude finding: bigger crash → bigger gap → larger absorbed volume. Direct test (varying noise amplitude on a fixed underlying drift) is a separate sim — sketched in hypothesis doc, not yet run. |
| P2 | BCH price support during synthetic crashes | DIRECTLY CONFIRMED. +16.2 pp mean recovery delta; up to +49.9 pp in favourable conditions; broad across the parameter space. |
| P3 | Adoption-conditional catalysis | DIRECTLY CONFIRMED. Monotonic with adoption; near-zero effect at very low adoption (0.05%/block); diminishing returns above 1%/block. |
| P4 | Gap-closure latency bounded by cadence not amplitude | NOT YET TESTED. Needs a sim that fixes the cadence and varies the initial gap size only; left as a follow-up. |
| P5 | Without arbitrage the null model degrades | CONFIRMED BY CONSTRUCTION. The paired WITH/WITHOUT design implements the null comparison directly; the WITH side outperforms in 75% of cases. |
3 of 5 predictions directly confirmed; 1 indirectly confirmed; 1 deferred. No prediction refuted. The catalytic-converter hypothesis survives the first simulation pass.
Surprises
- Scale invariance is a stronger result than I expected. The 0.2 BCH chipnet case produced identical mean catalytic strength to the 200 BCH mainnet case. That's because the mechanism is fundamentally about the ratio of FIATm absorption capacity to crash volume, not absolute size — exactly the §12 design intent. It also means the chipnet-scale test is informative for mainnet behaviour, not a toy.
- The mechanism INVERTS at offchain/reservoir = 5×. When FIATm is severely undersized vs the crash volume, the partial absorption + slow BCH-price-recovery model means it underperforms the null's 30-day natural recovery. This is a real failure mode — the hypothesis is not unconditional, and the sweep surfaced the breaking point. Adopting FIATm into a market with much larger speculative depth than the reservoir can absorb produces a worse BCH-price outcome than no FIATm at all, under these assumptions. Design implication: reservoir sizing matters, and an FIATm currency without enough reserve to absorb the speculative depth it faces would actually be net harmful to the substrate during a crash. This is the strongest design caveat to capture in any §12e draft.
- Diminishing returns to adoption above ~1%/block. Beyond ~1% of reservoir minted per block as arb capacity, additional adoption produces little marginal catalytic effect. The bottleneck shifts to offchain market depletion + price-recovery rate.
Honest caveats
- Transactional adoption is pinned ON in both tests. The hypothesis explicitly requires a market that values FIATm at face value (so arbitrage has an exit). Without this, the arbitrageur cannot extract profit and the mechanism breaks. The next test should vary this — "what if 30% of FIATm vouchers find buyers, vs 100%?"
- Linear offchain price-recovery model. Real markets have concave depth curves; a more realistic model would adjust the per-block recovery shape. The directional finding is robust; the exact magnitudes would shift.
- The null model's 30-day half-life recovery is a parameter. Varying it (e.g., 7 days in a small crash, 90 days in a structural collapse) would shift the comparison baseline. The catalytic strength is relative to the null; the absolute number isn't fundamental.
- Mature controller settings (
N_down=144, d_down=0.05) are the §20a 9-year endpoint; immature controllers track the crash more closely (less lag, less converter effect). The mechanism is hypothesized for the mature regime; it does not claim to operate at launch. - Single-currency single-crash scenario. Multi-currency interactions (e.g., ARSm arb competing with USDm arb for the same BCH) are not modelled. The catalytic-converter hypothesis at the family level needs its own test.
- No order-book or counterparty-risk model. The simulation assumes the arbitrageur always finds a willing offchain seller at the modelled price and a willing FIATm buyer at face value.
What the hypothesis doc says happens now
Per the Path to canonization in Parameters/FIATm/catalytic-converter-hypothesis_FOR-testing.md:
Stage 1 — refutation attempt. Run Predictions 1–5 in the simulator with multiple noise models + multiple arbitrage-response functions. If any prediction fails badly, the hypothesis is wounded; honest acknowledgement here + a
framings-and-rejected-pathsentry.
Stage 1 result: hypothesis survives. No prediction refuted; 3 directly confirmed, 1 indirectly confirmed, 1 deferred (P4 needs its own test).
Stage 2 — robustness. If Stage 1 passes, run it again with the §22 calibration sweep parameters varied, with the historical back-test path overlaid with noise, and per-currency.
Stage 2 candidates from this session's findings:
- Run the scale test with varied §22 calibration parameters to confirm scale invariance survives parameter perturbation.
- Overlay synthetic noise on the §20a 9-year BCH/USD path; replay through both controller
- arbitrage; measure cumulative absorbed volume.
- Multi-currency competition test (ARSm + USDm sharing an arbitrage pool).
- Vary the transactional-adoption assumption (the open caveat above).
- Test P4 directly: fixed cadence, varying initial gap size, measure time-to-close.
Suggested next-session actions
- Run Stage 2 (robustness) — the 5 candidates above.
- If Stage 2 passes too, draft §12e of the FIATm design record: "The rate-correction lag as a catalytic converter for speculative volatility — mechanism, regime of validity (mature controller, transactional adoption, reservoir sized to expected crash absorption), the failure mode at offchain/reservoir > 2×, design implication for reservoir sizing at deployment."
- Draft the companion ADR capturing the reservoir-sizing decision rule the failure mode surfaces.
- Primer extension translating the +16.2 pp mean / 75% positive cases finding into a public-facing claim: "the design that makes speculation accidentally productive for the substrate" — subject to robustness validation and per-currency confirmation.
The catalytic-converter hypothesis went from labeled-conjecture to mechanism-with-survived- first-test in one session. The remaining work is robustness, not refutation.
CORRECTION APPENDIX (added in snapshot 0163 session)
Two corrections to the findings as written above. Both are framing corrections — neither invalidates the simulation outputs, but the interpretation of those outputs needs revision.
Correction 1 — "scale invariance" was an artefact of hardcoded mature settings
Finding above: "By reservoir size: 0.2, 2, 20, 200 BCH → all +16.2 pp (identical). SCALE-
INVARIANT." This finding held controller settings fixed at the §12a.2 mature end-state
values (N_down = 144, d_down = 5%) across all reservoir sizes. The correct relationship
between reservoir size and catalytic strength runs through §12a.2 catalyst-driven
maturation, which is supply-conditional: each 210,000 cumulative-minted units advances
the controller one step toward the asymmetric end-state. A 0.2 BCH reservoir cannot fire
even one tenth of a catalyst before exhausting its supply; a 200 BCH reservoir can fire
~95 catalysts. The honest finding is therefore: catalytic strength is supply-history-
conditional via maturation, not scale-invariant. The scale dependence enters through
adoption history (cumulative minted), not through reservoir-cap-as-such.
The mechanism is always on, at all maturity states. At launch (immature symmetric controller) the catalytic windows are short (~2-3 hours after a crash); as catalysts fire the windows lengthen toward the asymptotic mature state. The strength curve is continuous and earned through adoption — the same principle as §12a.2's "bias earned through adoption, not given at genesis," applied to the catalytic-converter strength.
Re-test with the corrected supply-driven maturation logic is a Stage-2 prerequisite.
Correction 2 — N_CEILING = 144 vs design's N_down = 21
The Stage-1 results above used N_CEILING = 144 from sim-usdm-controller.mjs as the
asymptotic mature value. The §12a.2 catalyst table in the FIATm design record shows
N_down = 21 as the suggested asymptotic value after 20+ catalysts. This is a 7× discrepancy
between simulator and design record that propagates through the catalytic-strength
calculations. The mature-state catch-up-window estimates above (multi-day at mature state)
were based on N_down = 144; the corresponding estimate at the design's suggested N_down = 21
is ~4.7 days, not ~14 days. Reconciliation with the design record's intended value is a
Stage-2 prerequisite — the catalytic-strength numbers will shift on the reconciled baseline.
See snapshot 0163 for the consolidated correction record.