Doc 05 — MVP
Five Daml templates, one atomic Batch.
The MVP is a working continuation close on Canton: a Daml model where each LP's election stays private, a single Close choice settles assets, cash, and units all-or-nothing through a Daml Finance Batch, and the LPAC and regulator receive a need-to-know fairness window. A reusable EligibilityCredential lets a buyer cleared on one deal join the next in a click. A Next.js front end renders one view per party against a LocalNet of mocked institutions.
The Daml engine
Four templates carry the deal from terms to settled close. Elections are held on per-LP contracts — the privacy guarantee is the Canton ledger's, not the application's.
ContinuationDeal, exercisable once elections and the commitment are in. It validates the book and assembles a single Daml Finance Batch — settled atomically or not at all.
The Close choice
The Close choice is the whole thesis in one transaction: it builds the settlement instructions and submits them as one Batch. There is no intermediate state in which some legs have moved and others have not.
-- Consuming choice on ContinuationDeal, exercised by the GP once -- every LPElection and the BuyerCommitment are on the ledger. choice Close : ContractId Batch with elections : [ContractId LPElection] -- sealed, per-LP commitment : ContractId BuyerCommitment controller gp do -- 1 · asset leg: old fund -> new continuation vehicle -- 2 · cash leg: buyer -> exiting LPs (CIP-56 cash token) -- 3 · unit leg: new vehicle issues units -> rolling LPs + buyer settlement <- buildInstructions elections commitment -- one Batch. all legs settle, or none do. create Batch with instructions = settlement; ..
Asset transfer
The portfolio asset moves from the old fund to the new continuation vehicle.
old fund → new vehicleCash to exiting LPs
The buyer's committed cash settles to the LPs that elected to exit.
buyer → exiting LPsUnit issuance
The new vehicle issues units to the rolling LPs and to the secondary buyer.
new vehicle → rolling LPs + buyerPrivacy and the fairness window
Two guarantees come from the same Canton primitive: who is a stakeholder on a contract determines who can see it.
Sub-transaction privacy. Each LPElection is signed only by its LP. No other LP is a signatory or observer, so the roll-vs-exit terms never cross the syndicate. The GP and the operator orchestrate the close without seeing any individual election — they see that elections are in, not what they say.
Selective disclosure. The deal carries observer flags for the LPAC and the prudential regulator. Those parties are added as observers on the settled Batch and the deal record, opening a need-to-know fairness window after the close — provable fairness without exposing the live book or any party's standing terms. This is the Rooz line in code: need-to-know, not anonymity.
The stack
Daml Finance Batch
Asset, cash, and unit legs composed as one atomic settlement. The continuation close is a single ledger transaction.
CIP-56 cash & units
Cash and continuation-vehicle units are issued as CIP-56 tokens, settled as the cash and unit legs of the Batch.
Next.js multi-party UI
One view per party — GP, each LP, buyer, regulator. Each renders only what that party is entitled to read.
JSON Ledger API + TS codegen
The UI talks to the ledger over the JSON Ledger API, with TypeScript types generated from the Daml model so the contract shapes stay in sync.
Mocked institutions on LocalNet
GP, LPs, buyer, and regulator run as mocked parties on Canton LocalNet — enough to demonstrate the full close end to end.
One close, fully real
Not a slideware mock: the four templates, the atomic Batch, and the disclosure window all execute on the ledger.
The three-minute demo
Five parties, one ledger. Each pane is a real party view; the operator stays blind throughout. Sealed elections, then the one-click atomic close, then the regulator window.
Setup — five parties, five views
Open the five panes side by side on LocalNet. Establish that GP, three LPs, the buyer, and the regulator each see a different ledger view of the same deal.
Sealed elections
Each LP submits a roll-vs-exit election from its own view. Cut between panes to show that no LP can see another's election, and the GP sees only the count, not the contents.
Blind buyer commitment
The secondary buyer commits a price. The exiting LP's pane shows the slot redacted — the bid is sealed until the close resolves it.
One-click atomic close
The GP exercises Close. Assets move to the new vehicle, cash settles to exiting LPs, units issue to rolling LPs and the buyer — every pane updates from one Batch. Show that there is no intermediate partial state.
Regulator window opens
The regulator pane gains its need-to-know view of the settled close for the fairness review — after settlement, scoped to what it is entitled to see, with the operator still blind.
The flywheel — deal #2
A second deal opens. The buyer from deal #1 is presented its EligibilityCredential, opts in, and commits in one click — no re-onboarding. Onboarded once, reusable across closes.
Artifacts
Links land here as the build completes ahead of the submission deadline.
The MVP proves one thing end to end: a continuation close can settle as a single private, atomic transaction — with the regulator able to see, and no one able to see what they should not.