Join a committee

A fixing is signed by K of N parties who each already carry a position against the mark. No signer is ever asked for an opinion about the price. Each signer asserts a fact only it can see — and a fact is nearly free to answer, so the seat can be automated and stays honest in month six.

Status. No fixing has been published for commercial use and no committee has been convened. Nothing on this page is a claim that a seat is occupied. Signer protocol SIGNER_PROTOCOL v2 (22 September 2026); ledger package crossdesk-3.0.0.

In one screen

$0
Members are never charged and never paid. Fund and ETP issuers pay a licence; market makers pay per order. A committee member is neither.
1 / day
One fixing per series per day, guaranteed by the ledger. Automated: minutes of machine time. Manual: one confirmation in the portal, with your numbers.
K ≥ 2
A quorum of at least two, from opposed interests. No single party may reach K alone, and no single party may block it.
L1 · L2 · L3
Every published value states the trust level each signature was made at. Pilots start at L1; nothing settles for a third party until every signer is at L2 or above.

The five seats

Each seat wants a different answer

The issuer wants the wrapper marked at par. The lender wants it marked conservatively — it is the one under-collateralised if the mark is too high. The venue wants it marked where the asset actually traded. The custodian and the transfer agent are neutral and liable. A committee of three issuers is not a committee. The conditions below are the exact names the API accepts; the evidence fields are what the server checks before anything reaches the ledger.

seat · issuer

Issuer

Who sits here. The party that issues the wrapped asset. TradFi analogue: a benchmark contributor under a code of conduct (IOSCO Principle 14 / BMR); an LBMA direct participant with the ability to settle.

“The wrapper can actually be redeemed right now.”

Conditions · reserve model attested (e.g. cBTC)

  • attestor-quorumAt least your own threshold of attestors are online and signing.quorumSigners (integer) · quorumThreshold (integer) · rule: quorumSigners ≥ quorumThreshold
  • reserves-currentThe most recent proof-of-reserve attestation is less than 24h old.reservesAsOf (instant, ISO-8601) · rule: within 24h of the confirmation
  • reserves-cover-supplyAttested reserves are at least the circulating supply of the wrapped token.reserves (number) · supply (number) · rule: reserves ≥ supply
  • redemption-queue-clearNo redemption request is unfilled beyond its stated window.queueDepth (integer) · maxQueueDepth (integer) · rule: queueDepth ≤ maxQueueDepth

Other reserve models. If the reserve is on-chain verifiable (e.g. cETH, locked in protocol-controlled contracts) there is no attestor set: you assert your own on-chain verification < 24h, locked ≥ supply, queue clear. If it is custodial (e.g. a tokenised equity): custodian statement < 24h, holdings ≥ supply, queue clear. You are never asked for a number your model does not produce; an undeclared model is held to attested, the strictest profile.

On refuse

You do not sign at par. Refuse naming the failed condition; the administrator either restrikes with a factor below par and a rationale naming that condition, or no fixing is struck.

Eligibility and ongoing obligations

  • A named legal entity with disclosed principals and licence; the four on-ledger facts (registrar party, instrument id, registry URL, HoldingV1); a declared reserve model and attestation cadence; a signed attestation agreement.
  • Publish reserve attestations on cadence (< 24h); evidence-backed conditions only — no ticks; annual re-attestation of fitness, conflicts and confidentiality; notify any change of control.
  • Exactly one issuer seat per instrument. Issuer-controlled parties may never reach K. The issuer may not also hold the custodian or venue seat for its own instrument.
  • Suspension on a missed attestation; mandatory resignation if sanctioned for manipulation; removal for false evidence; three consecutive unexplained silences trigger a review.
Cost
$0 — never charged, never paid
Time
Automated: minutes/day · Manual: one confirmation/day
Checker
Reference config shipped (examples/issuer.yml)
seat · lender

Lender / risk taker

Who sits here. A platform holding the asset as collateral. TradFi analogue: a financial-intermediary / auction-participant member of a price oversight committee (IBA PMOC); a direct participant with bilateral credit lines.

“I will carry this number on my own book.”

Conditions

  • independent-mark-within-toleranceThe proposed mark is within your declared tolerance of your own valuation.independentMark (number) · rule: |mark − proposal| / proposal ≤ tolerances.markBps (default 25 bp)
  • liquidations-consistentNo liquidation you ran in the session cleared materially away from the mark.liquidationsToday (integer) · worstDeviationBps (number) · rule: worstDeviationBps ≤ tolerances.liquidationBps
  • book-acceptanceYou will mark your own collateral at this level for the period the fixing governs.acceptedAt (instant) · rule: a timestamp not in the future

This is the strongest signature in the protocol: the only one asserted against the signer’s own money. A lender that signs book-acceptance and then marks its book elsewhere has made a false statement, on-ledger, with its own signature on it.

On refuse

Refuse naming the condition — “my mark is 41 bp from the proposal; my tolerance is 25” is actionable, a vote of no confidence is not. Below K, no fixing exists for the day.

Eligibility and ongoing obligations

  • Actually holds the instrument as collateral (position evidence at onboarding, re-checked quarterly); balance sheet at risk; disclosed licence and principals; a declared tolerance in bp.
  • Numbers behind every condition; the tolerance may not be widened silently; quarterly position re-confirmation.
  • Position drops to zero: the seat lapses at the next quarterly review. Three refusals without cause trigger a review. Same manipulation-sanction rule as every seat.
  • At least one lender or venue in every K. A lender that is an affiliate of the issuer counts as issuer-controlled.
Cost
$0 — never charged, never paid
Time
Automated: minutes/day · Manual: one confirmation/day
Checker
Reference config shipped (examples/lender.yml)
seat · venue

Venue

Who sits here. A venue where the wrapped asset actually trades. TradFi analogue: a constituent exchange under CF Benchmarks’ Constituent Exchange Criteria; a regulated electronic trading venue at the first tier of the ICE Swap Rate waterfall.

“The mark sits inside the range my own book printed.”

Conditions

  • traded-rangeThe proposed mark lies within the high/low your own book traded in the window.low (number) · high (number) · rule: low ≤ proposal ≤ high — enforced by the ledger itself
  • spread-within-toleranceBest bid/ask spread at the strike is inside the declared tolerance.recorded, not checked
  • sufficient-volumeTraded volume in the window meets the declared minimum.recorded, not checked
  • no-prints-attestedYour book showed no trades in the window; you state the best bid/ask at the strike and do not contradict the proposal.bestBid (number) · bestAsk (number) · rule: bestBid ≤ proposal ≤ bestAsk when quoted; mutually exclusive with traded-range

This is the sharpest guard in the system: a venue cannot sign a price its own book never printed. The ledger refuses a range that does not contain the price, an inverted range, and a half-specified one. On Canton a window with no trades is the normal case, so a venue attests the absence instead of staying silent — and the band widens to carry it.

On refuse

Outside your range: refuse naming traded-range. No prints: do not refuse and do not stay silent — attest no-prints-attested with your best bid/ask. Never claim both.

Eligibility and ongoing obligations

  • An admitted constituent venue: all six rulebook §4.0 tests plus an executed data-sharing agreement, an API with trade and order data, KYC/AML compliance, and cooperation with inquiries. Volume above 5% over 30 days, trending to CF’s 3% over 90–180 days.
  • Annual conformance review presented to the committee; surveillance alerts reviewed as a standing item; traded-range or no-prints-attested, never both.
  • The administrator may suspend ad hoc; the committee decides permanence; the decision is published. Anyone may nominate an addition or removal.
  • At least two independent venues (different operators) at launch. A venue owned by the issuer or the administrator is disclosed and does not count toward the two.
Cost
$0 — never charged, never paid
Time
Automated: minutes/day · Manual: one confirmation/day
Checker
Reference config shipped (examples/venue.yml)
seat · custodian

Custodian / reserve holder

Who sits here. Whoever actually holds the backing — a regulated custodian, or the protocol-controlled contracts for an on-chain-verifiable asset. TradFi analogue: an LBMA direct participant with the ability to settle and clear; the custodian and securities-lending communities FTSE Russell draws committees from.

“This is what is actually in the account.”

Conditions

  • holdings-currentYour most recent holdings statement is less than 24h old.statementAsOf (instant) · rule: within freshnessHours of the confirmation (24h default, declared per asset)
  • holdings-cover-supplyHoldings you actually custody are at least the issued supply.holdings (number) · supply (number) · rule: holdings ≥ supply
  • no-encumbranceThe holdings are unencumbered — not pledged, lent or rehypothecated.encumbered (number) · rule: encumbered == 0

On refuse

A stale statement, a shortfall, or any encumbered units: refuse naming the condition. A missed statement moves the fixing to EXCEPTIONAL, then NO FIXING. Notify any lien or rehypothecation immediately.

Eligibility and ongoing obligations

  • A regulated custodian (or protocol-controlled contracts); holdings segregated from own assets; statement age within the declared freshness; an independent control report (SOC 1 / ISAE 3402) or on-chain proof.
  • Numbers behind every condition; immediate notice of any lien or rehypothecation.
  • Insolvency: immediate suspension. Must not be the issuer or an issuer affiliate.
  • Mandatory for any asset whose native network is not the settlement ledger.
Cost
$0 — never charged, never paid
Time
Automated: minutes/day · Manual: one confirmation/day
Checker
Same API and body; reference seat rules not yet shipped for this seat
seat · transfer-agent

Administrator / transfer agent

Who sits here. The party appointed under the fund’s governing documents that keeps the share register and does the fund’s accounting today — already liable for it, which is exactly why its signature carries information. TradFi analogue: a calculation or dissemination agent overseen under a benchmark oversight committee’s terms of reference.

“This is the share count the NAV is divided by.”

Conditions

  • shares-outstanding-reconciledShares outstanding on your register match the ledger at the strike instant.registerShares (number) · ledgerShares (number) · rule: registerShares == ledgerShares
  • fees-accruedAccrued fees and liabilities deducted are those the fund’s published schedule requires.accruedFees (number) · rule: accruedFees ≥ 0

On refuse

A register that does not reconcile: refuse naming shares-outstanding-reconciled and report the break the same day. An unreconciled register is a NO FIXING for a fund NAV.

Eligibility and ongoing obligations

  • Appointed under the fund’s governing documents; maintains the share register; reconciles shares outstanding daily; an SLA with the administrator.
  • Numbers behind every condition; breaks reported the same day.
  • Replacement by the fund, notified to licensees. Cannot be the benchmark administrator.
  • Where the fund self-administers, the seat is disclosed as issuer-controlled and excluded from K for issuer-majority purposes.
Cost
$0 — never charged, never paid
Time
Automated: minutes/day · Manual: one confirmation/day
Checker
Same API and body; reference seat rules not yet shipped for this seat

Every member discloses conflicts. The public roster follows IBA’s table: name, company, market position, seat and instruments covered, directorships and interests, date of the conflict-of-interest declaration — plus trust level and declared tolerance band. Tolerances are published in aggregate. Terms of office: six months initial, extended, maximum nine consecutive years, with an annual membership review. Removal is mandatory on a manipulation sanction, for any seat.

Automating a seat

Every condition is a query against your own systems

None requires a human to form a view. An unpaid committee that needs daily human attention decays into rubber-stamping within weeks, so a seat should run a checker that confirms automatically when all its conditions pass, refuses naming the condition when one fails, and halts when one cannot be evaluated. A halt is never a confirm, and never a refusal either. A checker must never auto-confirm on a failed condition and must never widen its own tolerances — both are invisible on the ledger because the signature looks identical.

The reference checker

signer-service/ in the repository is a small program you run on your own infrastructure. It reads each condition from a source you declare — a static value, an HTTP endpoint, or a command against your systems — and posts { checks, evidence } to POST /api/proposals/{cid}/confirm with a scoped API key. It never holds a Canton key, never forms a view about the price, and never acts twice on the same proposal.

It hears about a proposal by signed webhook (X-CrossDesk-Signature, HMAC-SHA256) or by polling GET /api/proposals?status=open&mine=true. Rules ship today for the issuer, lender and venue seats; the custodian and transfer-agent seats send the same body to the same route.

Five minutes, no account

npm ci && npm run build          # Node 20+
CROSSDESK_SANDBOX_USER=venue@sandbox.crossdesk \
  node dist/index.js --config examples/venue.yml --check
CROSSDESK_SANDBOX_USER=venue@sandbox.crossdesk \
  node dist/index.js --config examples/venue.yml

The sandbox header stands in for an API key with nothing at stake. In production the key comes from the portal (Settings → API key), is shown once, stored hashed, and can only confirm or refuse fixings for the instruments your seat covers.

The trust ladder

A signature is worth exactly what it costs to forge

Every published value states the level each signature was made at; the fixing record shows the mix, e.g. K=3 of N=5 — L1:2, L2:1. Scope limits apply at every level: a signer credential may only confirm or refuse fixings for the instruments its seat covers. It cannot move assets, propose a fixing, or act as another seat.

LevelWhere the signing key livesCould the administrator forge it?Your costWhat it requires from you
L1 · hosted partyOn the administrator’s participant; a scoped API key authorises and the administrator exercises the choice as your party.Yes, technicallyZeroYour e-mail on the roster. Nothing to run.
L2 · external signingWith you, off-ledger; the administrator submits a transaction you have already signed.NoModerateAn API key and a checker on your infrastructure (the reference signer-service or your own).
L3 · own participantOn your own Canton participant.NoHigh — you run CantonYour own participant party id on the roster.

L1 is honest for a pilot and dishonest as a destination. It is the right level for a free shadow run or a design partnership, where nothing settles against the value. It is not acceptable for an OFFICIAL fixing a third party settles against. Target state: every signer at L2 or above before that happens. Disclosed at onboarding: the administrator can assume a mapped user’s identity for a single request (support). Every such act is recorded, and it is never used to confirm a fixing on a signer’s behalf.

What the ledger enforces — package 3.0.0

  • The administrator signs every proposal and every fixing (signatory admin :: approvers). A proposal can only be born inside a choice on a committee the administrator signed; a forgery is not refused, it cannot be constructed.
  • K ≥ 2, K ≤ N, and the administrator is not a member. It proposes and publishes; it never attests.
  • A venue’s range or an attested absence is mandatory. Plain confirm is gone; every attestation carries a SignerCheck. A range from any other seat is refused on-ledger.
  • One fixing per series per day. Every proposal carries an attested asOfDate; one series contract per (administrator, instrument, session) is consumed and advanced by every finalise.
  • Any approver or the administrator may finalise — the proposer holds no veto. Members observe every fixing, so a member that did not sign can open a restatement.

The API enforces, before submission, that a claimed condition belongs to the seat claiming it and that the numbers behind it pass the stated rule. Nothing enforces the provenance of those numbers — that rests on your own systems, and on the fact that a false number is permanent, attributable, and made against your own money. This residual trust is disclosed to every seat rather than glossed.

How to start

A seat is issued, never self-registered

Open registration would let anyone self-declare as a lender, and the value of K-of-N is entirely in who the N are. So the roster is seeded by the administrator, and every row carries: e-mail · Canton party · seat · declared tolerances · API key hash.

Say which seat, and on what

One e-mail: the seat you hold (issuer, lender, venue, custodian or transfer agent), the instruments it covers, and the position that makes you eligible — the asset you issue, the collateral you hold, the book you run, the account you custody, the register you keep. An issuer adds the four facts: registrar party id, instrument id, registry base URL, HoldingV1 confirmation — and its reserve model.

Declare your tolerances and disclose conflicts

How far from your own valuation a mark may sit before you refuse (recommended 25 bp); any affiliation with the issuer, the administrator, or another seat on the same instrument. The seat is issued at L1 and your e-mail is added to the roster.

Sign in, read your seat, generate a key

The portal’s first screen shows exactly what your seat asserts for each instrument, the evidence fields the API accepts, and the checker quickstart. Generate an API key under Settings and point the reference checker at your own systems — or confirm by hand, with your numbers, once a day.

Shadow run, then move up the ladder

Nothing settles against a shadow value. When your checker has run clean for a period you are comfortable with, the level is recorded as L2 (external signing) or L3 (your own participant), and every published value carries it.

Write to s.borjas@lucilla.ca

Sending the e-mail commits you to nothing. See the rulebook and signer protocol for the full text, and Governance for how the committee is composed.