Design

Who sees what

The public chain sees rules, totals, fingerprints and hashes. Each party opens its own envelope and sees its own slice.

ReaderSeesNever sees
AgentThe whole register, every payment leg, every trade with its price, and whether a buyer passed screeningThe DQ list itself
BorrowerThe register, every payment, every trade (seller, buyer, size, date), its own DQ listTrade prices
Each lenderIts own position, its own payments and cash, its own trades with their pricesAny other lender's position or payment, the register, the DQ list
A buyerIts own trades, and its position once it has bought inThe DQ list. A refused buyer is told "not settled" and no reason
AuditorThe register through every payment and trade, with figures it can recomputeTrade prices, the DQ list
The public chainThe facility's name, the agent's and the borrower's accounts, which accounts take part, one total per interest request, how much was paid in and credited, every deposit and withdrawal, who sent each action, fingerprints, and envelope ciphertextPositions, per-lender payments, trade sizes and prices, the DQ list, why a trade failed

The last row is the honest one. Limits and status lists everything the chain shows, including what a careful reader could infer.

Eight sealed envelopes

After every action the enclave seals one envelope for each party, encrypted so only that party can open it. The contract stores them on the public chain, one per account, rewritten after every action. Each party opens its own envelope with its own view key and sees its own slice.

/visibility shows the public chain beside every party’s opened envelope. A server with no keys still renders the page as the public reads it, with every envelope sealed.

A fingerprint confirms no guess

Loan positions are round numbers, and a plain hash of the books would let anyone try “Alder 50 million, Birch 30, Cedar 20” and compare. So the books carry 32 random bytes that the enclave draws again with every answer. They are part of the fingerprint and appear in no envelope and nowhere on the chain. Two deals that hold the same books, to the cent, show different fingerprints. Each party’s commitment is salted the same way, from a seed inside its own envelope.

Secrets go in sealed, and payments stay inside

Anything secret a party sends (a trade’s buyer, size and price; the DQ list; the opening positions) is sealed to the enclave’s public key before it goes into a transaction. Lender payments are credits inside the books, not token transfers, so no per-lender amount ever appears on chain.

What the public chain shows, on purpose or by inference

  • Who is in the syndicate. Envelopes are stored per account, and every action’s reply lists one envelope slot per party.
  • Deposits and withdrawals, with amounts. They are token transfers. A buyer’s deposit and a lender’s withdrawal are public; what the money is for, and what is left in the books, are not.
  • Who did what, and when. Every action is a transaction signed by a named account. The chain shows that Alder offered a trade, that Delta accepted it and whether it settled. It does not show the size, the price or why a trade failed.
  • Totals. One total per interest request, how much the borrower paid in and how much was credited to lenders as a single figure. A refusal for a wrong total states the right total.
  • Envelope sizes. A party with more trades has a longer envelope. Envelopes are not padded to one length.
  • The agent’s proposals, when the agent is a DAO. Each proposal and each operator’s vote is public, with the action’s arguments: a rate, a total, the number of a request or a trade.

Checked live

On every load /visibility evaluates eight claims against the chain and the opened envelopes. Each is also a Rust test.

  1. The public chain names no lender's position or payment, and no trade's size or price.
  2. Each lender's envelope holds its own line, and names no party it has not traded with.
  3. The borrower and the auditor see every trade, and no price.
  4. Only the borrower's envelope holds the DQ list.
  5. A buyer that fails screening is told 'not settled' and no reason.
  6. Lenders were never credited more than the borrower paid in.
  7. Every refusal is on the public record, and the books did not move.
  8. Each party's commitment on the chain is the hash of the facts in its envelope, so one fact can be proved and no other shown.

The leak test searches every transaction of a recorded run as well, with no keys.