200M–1B gas in Solidity, roughly 110M even through Stylus, against a 32M per-transaction cap.
No Solidity, Noir or Circom implementation was found as of 12 Sep 2026.
A private account for tokenized stocks and tokens.
Tokenized stocks sit in a private account, not in a public wallet.
No wallet address for copy bots to follow.
Share a read-only key. Take it back any time; it keeps only what it already saw.
Fold every burner wallet into one private balance.
Show a fact about your funds, never the balance.
An exit that still works if the proving system fails.
Deposit from a wallet you already hold. DECOY grades that wallet's inbound edges first, and refuses to call a deposit clean when it is not.
The pool executes, not your address. Wait for cover or execute now — your share of the batch is shown before you commit.
Issue a read-only key. It returns a correct balance including every spend, and it can authorize nothing.
Bump the epoch and churn once. Forward-only — the retired key keeps only what it already saw.
Every construction below was priced before it was declined. Its figures are ESTIMATE, 12 Sep 2026. Fork scripts will be published with the contracts; until then these figures cannot be reproduced independently.
Monero retired ring decoys in January 2026 when FCMP++ activated. DECOY did not port rings either, and the gas math above is the reason — not a preference. Decoys taught the world what an anonymity set is; this is the next one.
| Operation | Position on a logarithmic gas scale | Gas and provenance |
|---|---|---|
| A claim, Chaum–Pedersen | 24,300 gas · MEASURED | |
| A key image spent, as a nullifier | 24,800 gas · MEASURED | |
| Monero's UnspentProof | 236,138 gas · MEASURED | |
| CLSAG on bn254, 16-member ring | 0.9–1.5M gas · ESTIMATE | |
| Bulletproofs+, one 64-bit range proof | 1.2–1.6M gas · ESTIMATE | |
| CLSAG on ed25519, 16-member ring | 80–100M gas · ESTIMATE | |
| FCMP++ through Stylus | 110M gas · ESTIMATE | |
| FCMP++ in Solidity | 200M–1B gas · ESTIMATE |
Shipped: MEASURED, 12 Sep 2026, on a mainnet fork (forge + anvil ‑‑fork‑url, gasleft() deltas) at 0.0956 gwei and ETH $2,522. Fork scripts will be published with the contracts; until then the shipped figures cannot be reproduced independently. They are re-measured the week the calldata subsidy ends. Refused: ESTIMATE, 12 Sep 2026, priced from the construction and not run; no implementation was found to measure as of 12 Sep 2026.
Shareable. Returns a correct balance including every spend, and authorizes nothing. It is off-chain key derivation, so issuing one touches no contract.
Compare key modelsBump the epoch and churn once. Zcash's viewing key cannot be withdrawn after it is shared. Monero has no shared state to withdraw one with. An EVM chain does.
The retirement stepA Chaum–Pedersen statement at 24,300 gas, and Monero's UnspentProof at 236,138 gas.
See the gasWhich viewing keys see every spend, and which can be withdrawn once shared.
Monero's UnspentProof is specified in Zero to Monero 2nd ed. §8.1.5, whose footnote 9 reads “UnspentProofs have not been implemented in Monero.” It has never run on-chain.
k_eff = min( k_batch, k_root, k_value, k_asset )
DECOY runs the published pruning attack against its own chain data every block, and publishes the number that survives it.
Token identity — the strongest pruning channel. The asset is a private witness, so the membership proof is asset-blind.
One tree, one canonical checkpoint root per 512 insertions or 15 minutes. Every spender in a window submits identical bytes.
Inputs, outputs and exits are ladder-quantized. Published per denomination tier as a histogram.
Distinct spenders in your batch. Your share of its notional is shown before you commit.
On day one the tree holds the builder's own seeded notes and k_eff may be 1. The interface says so in those words, and the fraction of the set held by the builder is printed next to the count.
Two production shielded pools answered circuit soundness problems in 2026.
Aztec V5 shipped a proof-forgery bug found by its own team six days after mainnet. A flaw in Zcash's Orchard circuit, found 29 May 2026, was answered on 28 July with an entirely new shielded pool.
DECOY's verifier is generated by the same proving stack as one of them. That is stated here rather than buried.
In freeze mode anyone streams the leaf list back on-chain against a keccak hash-chain head. You claim with a plain Merkle path and a signature. No SNARK, no Poseidon, no trusted root, no guardian vote — the one construction that survives a broken verifier.
shieldedSupply[a] + pendingDeposits[a] == balanceOf(pool), checked every block by an independent public monitor. Fees leave the pool at settlement, so this is an equality rather than a useless inequality.
Hard on-chain pool cap starting at $250,000, per-note cap $25,000, raised on a published schedule tied to elapsed clean days — never to demand.
decoy-prune will be an open-source reimplementation of the published pruning attack, run against DECOY's own data every block and wired straight into the Set Meter.
Direct reads over public endpoints.
Verified and CREATE2-deployed, with every address published.
TypeScript. Local scanning, browser proving, no scanner service and no committee.
Every figure on this page, with the fork scripts that produced it.
The pruning attack, open source, run against DECOY itself.
Independent, public, per-block, per-asset solvency check.
The key ladder, the nullifier construction, and what each of them cannot do.