Design
Who sees what
The public chain sees rules, totals, fingerprints and hashes. Each party opens its own envelope and sees its own slice.
| Reader | Sees | Never sees |
|---|---|---|
| Agent | The whole register, every payment leg, every trade with its price, and whether a buyer passed screening | The DQ list itself |
| Borrower | The register, every payment, every trade (seller, buyer, size, date), its own DQ list | Trade prices |
| Each lender | Its own position, its own payments and cash, its own trades with their prices | Any other lender's position or payment, the register, the DQ list |
| A buyer | Its own trades, and its position once it has bought in | The DQ list. A refused buyer is told "not settled" and no reason |
| Auditor | The register through every payment and trade, with figures it can recompute | Trade prices, the DQ list |
| The public chain | The 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 ciphertext | Positions, 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.
- The public chain names no lender's position or payment, and no trade's size or price.
- Each lender's envelope holds its own line, and names no party it has not traded with.
- The borrower and the auditor see every trade, and no price.
- Only the borrower's envelope holds the DQ list.
- A buyer that fails screening is told 'not settled' and no reason.
- Lenders were never credited more than the borrower paid in.
- Every refusal is on the public record, and the books did not move.
- 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.