Dress Code: Confidential
I showed up in a black jacket this week, like a serious businessman here to discuss confidential tokens and privacy. Not because I own no other jackets. The agenda: instead of me talking for an hour, we were going to play a game built by SDF’s new Frontier Lab team, with a stack of colleagues and ecosystem friends on the call. One piece of housekeeping first, because it was too big to skip: USDT0 is live on Stellar. The infrastructure that carries Tether’s USDT to every network launched on Stellar the day before the stream — a real milestone for a chain built for payments and cross-border finance. But this meeting was about confidentiality, and about how we’ve only scratched the surface of confidential tokens so far. The August 6 Q&A covered the design philosophy; this week was the hands-on version. The cast: Bri, senior developer advocate on the Frontier Lab team, who built the game. Playing: Tyler, Elliot, Raph from Lumen Loop, Boxy from Stellar Light, and Patrick, introduced by Bri as “some random guy I picked up off the street.” Several people arrived in costume. Patrick’s suit jacket, Halloween accessories, and riding shades were, in his words, an attempt to be confidential and undercover. He later admitted the jacket was only on because it was wrinkled and he needed it Saturday. Sweating the wrinkles out, live.Who Ate Gerald?
Gerald was a villager. Emphasis on was. One morning the village wakes up, Gerald has been eaten, and that’s how everyone learns there’s a werebear living among them. Who Ate Gerald? is an eight-player social deduction game in the Werewolf/Mafia family: everyone gets a secret role, one player is the werebear, and the village has to banish the werebear before it eats everyone. Bri built it because she wanted a more fun way than a blog post to demonstrate the confidential token transfer flow, and to learn it herself by building with it. The caveat, stated up front: confidential tokens are still a developer preview, on testnet only, not ready for production. OpenZeppelin built the Soroban contract suite and the Noir circuits that make confidential SEP-41 tokens possible; Nethermind built the UltraHonk verifier that checks the proofs on-chain. The privacy section of the developer docs has the details, and I was pasting that link into chat all stream. A day in the village:- Shop. Log in with Freighter set to testnet, pick a character, and visit two of the four shops: blacksmith, general store, butcher, chapel. Items protect you, expose other players, or just cause chaos. The chapel sells Gerald’s fingers; when the eight fingers run out, his two thumbs appear, then toes. Poor Gerald.
- Ask Maude. Every purchase is a real confidential token transfer. The whole village can see which shop you interacted with, but nobody can see what you bought or how much you spent — except the auditor. In the game that’s Maude McLedger, the village fortune teller, who holds the auditor key and can read the amounts. Each player gets one private question per day: “what did Trixie buy at the blacksmith?” or “did anyone buy something from the chapel?”
- Accuse and vote. Maude’s answers become clues, bluffs, and misdirection. Maybe Raph bought a barrel of beer because it protects you from the werebear at night. Or maybe he bought it precisely so you’d think he isn’t the werebear. The most-voted player is banished; an innocent villager loses their vote but keeps talking. Then night falls, the werebear eats someone, and the morning starts over with fewer villagers.
Where the Value Actually Lives
Before the demo, Bri gave the clearest explanation of confidential tokens I’ve heard so far, built on two mental models. The first: where the value sits.- Regular XLM in your wallet. Public, boring, visible on any explorer. Bri’s testnet account was sitting on almost 18,000 test XLM.
- The shared pool. The confidential token contract is a wrapper around a regular asset — XLM in the game, but any SEP-41 asset works. Every deposit puts XLM into one big pool held by the contract, and it stays there until someone withdraws. The pool’s total is completely public: around 34,000 XLM on stellar.expert during the call. What is not public is how that total is split: 500 of it is Bri’s, 100 is Boxy’s, 10 belongs to the butcher, and you can’t tell any of that from the chain.
- Confidential claims. Nobody inside the system carries their own pile of XLM; they carry claims on the pool. For every registered participant the contract keeps an entry with their public keys, a pending balance (OpenZeppelin’s docs call it the receiving balance), a spendable balance, and which auditor they chose. When the game says Bri has 500 XLM, she really has a confidential claim on 500 XLM in the pool, and the number itself is hidden inside a Pedersen commitment: anyone can see the commitment on-chain, nobody can read the balance out of it. (Bri: “I actually don’t really know what that is very much, so that’s all I’m going to say about it.” Honest, and correct.)
The Six Steps of a Confidential Payment
The second mental model is the lifecycle, which the game displays as a checklist that lights up as you play:- Register — each address registers once per wrapper contract. Bri’s was already green because she has played the game, in her words, thirty million times.
- Deposit — public XLM goes into the pool.
- Merge — the sender moves their pending balance into their spendable balance.
- Transfer — the sender confidentially moves part of their spendable balance into the receiver’s pending balance.
- Merge — the receiver moves the incoming claim from pending to spendable.
- Withdraw — the receiver exchanges part of their claim for regular XLM back in their wallet.