Sealed-bid repo on Canton

Repo quotes,
behind glass

A borrower asks a panel of lenders for cash against collateral. Each rate reaches the borrower and nobody else, and the repo then lives on the ledger until it is repurchased.

Borrower sees every quote
Regulator sees reports only
Lender B sees nothing of rivals
daml/Talang.damlL549
template RepoQuote
  with
    borrower : Party
    lender   : Party
    rateBps  : Decimal
    haircut  : Decimal
    ...
  where
    signatory lender, borrower
    -- no observer: rivals and the
    -- regulator never receive it
0 observers
HackCanton Season 3 · Financial Applications Scroll for more
0rival quotes visible on any lender node, checked every run
0requests, quotes or loss notices visible to the regulator
58 / 58Daml scripts passing, plus 41 / 41 MCP end-to-end checks on a participant
6repo states seeded through the Ledger API

01 · Lifecycle

How a repo lives

Every step is a Daml choice the contract re-checks. Nothing settles on trust.

  1. 01

    Request

    Borrower

    Only the invited lenders see it, and it carries no rate.

  2. 02

    Sealed quotes

    Each lender

    Full principal locked behind the quote. Rivals and the regulator never receive it.

  3. 03

    Award

    Borrower

    Atomic opening leg: collateral pledged, cash delivered, losers refunded unrevealed.

  4. 04

    Margin · Substitution · Roll

    Lender and borrower

    Calls priced from a mark under an hour old, refused while covered or below the minimum transfer. Swaps and rolls re-check coverage.

  5. 05

    Repurchase or Default

    Borrower · Lender

    Principal plus ACT/360 interest home, fee to the venue. An unanswered call or past maturity hands the pledge to the lender.

02 · Privacy proof

What each node sees

Nothing is hidden by the page. What a role cannot see never reached its node: the contract's signatories and observers decide who receives each fact.

0 rival quotes on any lender node, read back from every node on every run.

Who receives each contract
ContractBorrowerLender BRegulator
Request✓✓if invited—
Lender B's own quote✓✓—
Lender A's quote✓—never arrives—
Loss notice✓rankonly—
Best execution✓—✓no names
Lifecycle reports✓✓its repos✓every event

03 · Best execution

Prove the price without leaking it

When the cheapest rate's haircut does not cover, the borrower takes rank 2, and can still show the regulator how price discovery went.

To the regulator

Quotes weighed
3
Winner's rank on rate
2
Gap to best rate
6-25 bp band
Lenders named
none

To each losing lender

Rank 3 of 3

No winning rate. No winner. That is all a loser is told.

04 · BitSafe Decentralization Manager

Marks no single party can move

Margin is computed from a mark that k of n independent pricers must confirm. A lender can be a syndicate that quotes, calls margin, defaults and offers rolls only after a threshold of its members confirms.

  • Uses BitSafe's released governance-action-v1 and governance-core-v1 DARs unchanged.
  • Threshold refusal and execution proven in Daml scripts and on a Canton participant.
  • Run on a three-participant DecMan LocalNet: it still publishes with one node down, not with two.
  • Run on the NODERS DevNet participant too: 1 of 3 refused, 2 of 3 executed, 8 of 8 steps.

05 · Canton Token Standard

Real assets on both legs

Cash such as USDCx and collateral such as CBTC as CIP-0056 allocations. Repurchase unwinds them, default executes them, margin and substitution add or swap them.

  • Repurchase appears in any CIP-0056 wallet as a standard allocation request.
  • Built and tested on the Allocation / AllocationRequest interfaces, against a registry implementing them.
  • CBTC and Canton Coin run through their live registries on DevNet; in a CBTC default there, the pledged CBTC was executed to the lender through the registry.
  • USDCx not yet: DevNet has no USDCx registry.
Allocation requestTalang repurchase
To Lender A50,125.00 USDCx
To venue2.08 USDCx
ReturnsCBTC collateral
Good for the day it namesAllocate

06 · AI desks over MCP

Three agents, three nodes, same privacy

Each agent reads only its own party's node, so it is bound by the same privacy as a human: a lender's agent never sees a rival's rate.

Lender desk

Quotes, calls margin, reviews substitutions, offers rolls.

open_requestsquotecall_marginoffer_rollloss_historyprivacy_check

Borrower desk

Ranks quotes by coverage and takes the cheapest covered one.

quotesawardbookaccept_rollprivacy_check

Regulator desk

Every lifecycle event and every best-execution record, nothing upstream.

lifecyclebest_executionprivacy_check

07 · Business model

The venue earns on every repo

A fee in basis points per annum of principal, ACT/360, collected inside the repurchase and every roll, so it cannot be skipped. Built and tested.

4,800,000×10 bp×30 / 360
Venue fee on a 30-day repo400 USDC

Open the desk as any role

Every number on the desk is read from that role's own node.