Confideprivate settlement for tokenized stocks
Confidential delivery versus payment on Solana

Private block trades for tokenized stocks.

Exchange tokenized stock for stablecoin in one atomic transaction. The two parties can verify the encrypted legs before signing, while everyone else sees nothing that moved.
No wallet or API key is needed to inspect the live evidence below.
A Confide settlement
SELLER DELIVERS
50,000 shares
tokenized stock
⇄
BUYER DELIVERS
$8.75m
stablecoin
Both legs are encrypted. Each party checks the other amount before signing.
what the public ledger shows0  0  0  0
Why now

Public AMMs publish the size of every fill.

The SEC's 2026 relief for tokenized stock permits AMM-executed trading, but requires a public tape. For a desk, publishing size and direction within ten minutes makes the venue unusable for a block trade.
Confide does not match buyers and sellers or operate a venue. It settles a trade the two parties have already agreed.
A public AMM reserve
1,000,000 sharesbefore
950,000 sharesafter
Subtract two public states: the 50,000-share trade is visible.
How it works

A private settlement layer, not another exchange

01

Agree off chain

The parties choose their counterparty and price separately. Confide never operates an order book.

02

Check before signing

Each side reads the other's encrypted amount and verifies the proof context for itself.

03

Settle or cancel

Stock and cash transfer in one Solana transaction. If either leg fails, neither side settles.

See the trade work on devnet

A standing test issuer lets you open a confidential position and swap it with another account. The real-mint issuer approval remains the work that needs an issuer.

Live proof, for reviewers. The sections below decode real mainnet and devnet data in your browser. They support the product claim above; they are not required to understand it.

Watch the gate open, then watch the trade settle.

Real devnet transactions, fetched and decoded here by your browser — including the same allocation sent twice: once refused on chain because the issuer had not signed for the account, and once settled after one instruction from the issuer.
reading devnet…
1,992
tokenized stocks ship confidential balances — every one of them
518,744
live token accounts across Apple, NVIDIA, SpaceX, Anthropic and AMC
0
have been approved. Three have asked; no issuer has signed.
Read from mainnet and counted by scripts/usage-scan.sh. The feature is shipped on every mint and gated on every mint, and no issuer has signed for an account yet — so there is no incumbent here and nothing to be late to.

Run the devnet testbed yourself

There is a standing issuer on devnet whose gate is shut exactly as all 1,992 are — and whose approval key is published in the repository. So you can open a confidential position the chain reports as zero — and, since 2026-09-22, trade it with somebody else in one transaction that shows neither size:
git clone https://github.com/psyto/confide
./scripts/testbed-join.sh
Needs the Solana CLI, Rust and a little devnet SOL. The key can approve accounts and cannot mint, which is checked rather than claimed — docs/TESTBED.md.

Everything below is the evidence. Nothing above depends on you reading it.

Why there is nothing in the middle

Two Token-2022 instructions, two signatures, and Solana's atomicity where a clearing house would be. What Confide does is everything around that: the zero-knowledge proofs the chain will not assemble for you, verified on chain and citable by address, and the check that lets each side read the other's amount before signing.
Delivery versus payment is what a clearing house exists for — neither side will go first, so finance inserts a central counterparty, membership, margin and a day of lag. A transaction that is all-or-nothing needs none of it. Run it: MODE=dvp ./scripts/swap-e2e.sh.

The amounts are encrypted, so a party could be asked to sign a leg that underpays. Each side answers that before signing and alone: a confidential transfer encrypts the amount under the recipient's key too, so the recipient decrypts it straight out of the already-verified proof context (swap-check). No trust, no third party, nothing revealed to anyone else.
Walkthrough: the same position seen four ways - the market sees nothing, a lender sees only that it covers the loan, the auditor and the holder see the number. Click to play.
The presentation, 2:22 — the trade, the count, and what is left. Click the frame, or watch on YouTube (youtu.be/du0Twt_c9wQ). Every terminal pane in it is the stdout of a command run moments before the recording; two of them reach mainnet and devnet.
One correction to it, 2026-09-30. The narration says “every tokenized stock on Solana”. The measurement is 1,992 mints from three issuers' catalogues — exhaustive over that list, not a census of the chain. Every figure it counts is unchanged; only the population's name was wrong. The recording is left as it went out, because it is the record of what was said.

Why anybody wants it

Everything above is what runs. This is the market it runs into, read from mainnet by your browser rather than asserted.

Why no issuer's mint escapes it

1,992 tokenized stocks from three issuers' catalogues run on Token-2022 with confidential transfers switched on. Every one of them leaves the auditor key empty — because the only key on offer reads everyone's everything, forever, and no setting of that is correct for a regulated issuer.
Read from mainnet, just now, by your browser. NVDAx and TSLAx are Backed's; NVDA.US and AAPL.US are Backpack Securities'. Three issuers, the same empty slot on every mint — that is the finding, and all 1,992 mints check the same way (scripts/slot-scan.sh).

The count, mint by mint

Every token account on each of these mints, and how many carry the extension that makes a balance confidential.
reading usage.json…
Counted by scripts/usage-scan.sh against mainnet, not by this page — a scan of a third of a million accounts is not something to run in a browser tab. Size is only the cheap filter: the first pass found seven large accounts on Apple xStock and every one was large for an unrelated extension, so the check reads the extension list. There is no incumbent here and nothing to be late to.

Which makes the first trade an issuance.

A confidential account cannot receive anything until its issuer signs for it, and none has. So the party who can open the account is one of the two parties to the trade — and the first trade through that gate is not a swap between holders. It is an issuance.
Both halves are on devnet and decoded at the top of this page: the same 20,000-share allocation against $3,500,000, refused before the issuer signed — Custom(24), Account not approved for confidential transfers — and settled after one instruction from the issuer. The auditor slot is empty throughout: the issuer is the sender and needs no key to read what they sent.

Why not just use an exchange?

You cannot. A pool's reserves are public state, and a trade moves them by exactly the amount traded — subtract two consecutive states and you have the size, every time, whatever the token itself can do. It has to be two parties, directly.
Not a gap in this, but why it is shaped as it is. And the SEC wrote the same thing down on 17 September: the relief covers AMM-executed trading only, which is the one venue that cannot conceal a fill.

Meanwhile, anyone can read anyone.

Wallets that touched NVDAx in the last few transactions, and what they held when it settled. These are the balances the transaction itself published, not a lookup of what they hold now — which is the point: the number was public the moment it landed.
Try any address — yours, or one you know. The page reads its recent transactions.
Paste an address above.

The same position, under Confide.

A live account on devnet. The chain shows nothing. The position is there. Its mint gates new accounts exactly as NVDAx does — autoApproveNewAccounts: false — so the issuer had to sign before this account could hold anything. On a real mint that signature is a conversation, not a transaction, which is the one thing here that cannot be done without them.
The other half, parked — a lender pricing collateral it cannot read, and a quarterly position report that cannot be tidied afterwards. Both live on devnet, both waiting on a venue.

A lender can check your collateral without seeing it.

The half that waits on a venue. Everything above needs nobody's permission; this needs a lending market that can price a balance it cannot read. Ask the decision page whether Kamino can take any of the 1,992 as collateral today — it reads the mint from mainnet in your browser and answers against Kamino's own pinned rules.
A lender needs one bit: does the collateral cover the loan? Two proofs answer it over the account's own on-chain ciphertext — equality binds a commitment we can open to the account, then the range proof runs on the surplus. Press the button and Solana's ZK program will check them, right now, from your browser. And a lender can now take it — a transfer the borrower authorises at origination and cannot later refuse, parked on chain under an authority they cannot close and fired by a program that owns the escrow. No key reconstructed, no committee asked, the amount never revealed. The floor is proved on chain against the escrow's own ciphertext; the price is the loan's to establish, and the chain enforces the consequence. It runs on devnet: the loan account still reads seized.
The proofs were generated by scripts/prove-collateral.sh over the account above; the verification you just triggered is live.

Both endings, read off the chain by your browser

An escrow has two exits and a loan can only take one. These are two real loans on devnet, decoded here from their own account data — the flags below are read from the chain, not from anything this site stores.
reading devnet…
Run either one yourself: ./scripts/seizure-e2e.sh for the default, MODE=release ./scripts/seizure-e2e.sh for the return. The borrower signs nothing after the handover in either case, and neither account ever shows what moved.

Last quarter's number cannot be tidied.

An LP is owed a position report every quarter. Today that number is written afterwards, and nothing binds it to what was actually held on the reporting date. Confide seals the position that day — over the account's own ciphertext above — and anchors a 32-byte commitment on chain. Forty-five days later a committee opens it. The holder is not one of them, and a figure restated in the meantime does not open the commitment.
reading devnet…
Written by scripts/anchor-receipt.sh, opened by scripts/committee.sh — five separate processes, and the holder's exited in September. Nothing about the position is on chain: a hash and two dates.

What is not built.

The gate on a real mint. The issuer above is a devnet testbed whose approval key is mine. On NVDAx, two accounts have asked and none is approved — and whether an issuer would sign is not measured here, because nobody has asked one.
Matching. Settlement is done; finding the other side is not. Bringing buyers and sellers together is the exchange definition at Rule 3b-16, so it stays off. Price is agreed off chain.
The lending half is parked, above — it waits on a market that can price a balance it cannot read. And traction is zero: no pilot, no user, no issuer asked, and nobody outside the repository has run any of it.
Every figure on this page came off a chain and one command reproduces each. Devnet resets; scripts/healthcheck.sh re-checks every claim.