Skip to main content

Annotated tour

A narrated walkthrough that explains why IRSForge is shaped the way it is. Pair this with Quickstart — the quickstart shows what to click; this page explains why each surface exists.

The yaml-first design

Everything is driven by irsforge.yaml at the repo root. One file. profile: demo | production is the only switch between "runs offline on a laptop" and "deploys against real Canton participants with OIDC and live curve feeds."

Why: a participant evaluating Canton should be able to read one config file and see exactly what they need to provide for production. The demo isn't a separate codebase — it's the same code with stub providers.

See Demo vs Production.

Why a Workspace separate from a Blotter

Trading screens (/) and risk screens (/blotter) have different rhythms:

  • Workspace is draft-first — most of what you compose never lands on-chain. It's a pricing surface.
  • Blotter is live-first — every row is on-chain.

What-If on the blotter (a temporary draft cloned from a live position) bridges the two without conflating them.

Why signed Credit Support Balance, not two pools

Earlier iterations tracked postedByA and postedByB separately. That model admitted a state real CSAs never reach (both sides simultaneously posted) and produced phantom margin calls on the wrong side when one side over-posted.

The signed-CSB model — one signed per-currency balance per pair — is what Bloomberg MARS, AcadiaSoft and real ISDA CSAs use. It makes the bug structurally impossible.

See CSA Model.

Why the scheduler is its own party

Lifecycle and settlement choices need a Daml signatory. Hardcoding Operator would conflate "platform admin" with "automated cron driver" — bad for audit, bad for credential rotation.

Scheduler is a separate party with its own JWT. Daml 2.x has no disjunctive controllers (controller a | b doesn't exist), so we ship sister *ByScheduler choices for every effect the scheduler needs. Same body helper, different controller.

See Scheduler.

Why the demo curve ticker exists

Canton's PublishDiscountCurve archives the previous Curve contract on every publish. The ACS holds exactly one curve per key. Without something tickling the curves during a demo, the blotter's Trend column would be flat.

The ticker re-publishes seeded curves with bp-noise on a cron — purely cosmetic, demo-only, vanishes in production.

See Demo Curve Ticker.

Why the manual override toggle

scheduler.manualOverridesEnabled: true (demo) exposes "Trigger / Settle / Mature" buttons in the UI so a human can drive the demo deterministically. In production it's false — buttons hidden, scheduler is the only path.

The contracts don't change — both code paths exist in Daml. The toggle is UI-only.

Why FpML

Every existing IR-derivatives platform (Bloomberg, IHS Markit, ICE) speaks FpML. Round-trip FpML import/export means a Canton-resident swap can be moved into and out of off-chain systems without manual re-keying.

See FpML Import / Export.

What's intentionally out of scope (today)

  • Live providers for EFFR, FX, and credit curves — Phase 9 follow-up. Until then those flows use demo.* stubs.
  • Bilateral CSA proposal — current init seeds CSAs at boot via submitMulti. Production deployments will want a CsaProposal template (mirror of CdsProposal).
  • Holiday calendars / business-day adjustments — IRSForge runs 24/7 on-chain. Calendars are informational only.
  • Versioning of the docs site — single "current" version; turn on when v1 cuts.