// schema · upcoming hard fork · fcmp++

From a ring of sixteen
to the whole chain.

FCMP++Full-Chain Membership Proofs, Plus Spend Authorization, Plus Linkability — is the most significant cryptographic upgrade in Monero's twelve-year history. It retires CLSAG ring signatures (see the prior CLSAG/RingCT schema) and replaces them with a zero-knowledge membership proof over the entire set of past outputs. The anonymity set jumps from 16 to ~150 million. Decoy selection — and every heuristic attack built on it — disappears.

replaces clsag ~150M anon set curve trees + bulletproofs helios / selene curves audits in progress · 2026
01 · the leap

§1What actually changes

Today, when you spend an output, your wallet picks 15 random decoys and CLSAG proves the signature was made by one of these 16. The anonymity set is small, fixed, and built from a heuristic decoy selection algorithm that has been the subject of academic attacks for years. FCMP++ throws all of that out.

BEFORE · CLSAG · since 2020
16

RING SIGNATURE

Each input is mixed with 15 chain-sampled decoys. The signer proves one of these 16 keys is theirs, without revealing which. Anonymity set is hard-capped: bigger rings = linearly bigger transactions.

AFTER · FCMP++ · ~2026
~150M

FULL-CHAIN MEMBERSHIP PROOF

A zero-knowledge proof that the spent output is somewhere in the entire UTXO set — every output the chain has ever produced. No decoys. No selection algorithm. The proof scales logarithmically, so the tx stays small even as the chain grows.

The mechanism is fundamentally different. Instead of listing decoys, FCMP++ produces a compact succinct proof: roughly 3 KB, verifiable in tens of milliseconds, attesting that the prover knows a valid output somewhere in a Merkle-tree-like structure built from every output on chain. The on-chain transaction never names a specific output — it just shows the proof.

02 · the problem it solves

§2Why CLSAG had to go

CLSAG was a beautiful piece of cryptography — 25% smaller and faster than its predecessor MLSAG — but the underlying ring-signature paradigm has a hard ceiling. FCMP++ doesn't just enlarge the ring; it abandons the ring entirely.

α

The size ceiling

CLSAG cost grows linearly with ring size. Doubling the anonymity set doubles the bytes on chain and the verifier time. Getting to 1000+ members this way is infeasible.

β

Decoy selection attacks

Decoys are sampled via a gamma distribution matched to real spend timing. But timing analysis, EAE (Eve-Alice-Eve), and flooding attacks all exploit the fact that the real input often stands out statistically among the 15 chosen decoys.

γ

The "poisoned outputs" problem

If an attacker creates many outputs and observes which appear later as decoys, they learn correlation data. With small rings, repeated sampling concentrates evidence over time. Larger rings would help, but see (α).

The strategic shift

Ring signatures answer "which of these N wallets signed?" — and the cryptographer chooses N. FCMP++ answers "which of every wallet that has ever existed signed?" — and the answer is structurally unanswerable. The chain itself becomes the anonymity set, automatically, without any heuristic.

03 · what's inside

§3The six moving parts

FCMP++ is not one technique but a careful composition of six. Each was a research effort in its own right; the elegance is in how they fit together. The whole construction has been formally verified gadget-by-gadget by Veridise and is undergoing final integration audit by Trail of Bits.

DATA STRUCTURE

Curve Trees

A Merkle-tree variant where every node is a Pedersen commitment instead of a hash. Internal nodes commit to their children's commitments. Membership in the tree can be proven in zero-knowledge with only O(log n) work.

ELLIPTIC CURVE CYCLE

Helios & Selene

Two curves engineered so each one's base field equals the other's scalar field. This "tower cycle" sits above Ed25519, letting the proof recursively verify commitments at each tree level without expensive emulation.

⟨⟩
ZK PROOF SYSTEM

Generalized Bulletproofs

An extension of Bulletproofs+ supporting arbitrary arithmetic circuits (not just range proofs). This is what actually generates the succinct membership proof. Same family Monero already uses for amounts.

SCALAR-MULT OPTIMIZATION

EC Divisors (Eagen)

Liam Eagen's trick: scalar multiplications inside the ZK circuit are normally extremely expensive. EC divisors prove them by checking that a polynomial vanishes at specific points — orders of magnitude faster.

σ
SPEND AUTHORIZATION

Generalized Schnorr Protocol

A Schnorr-style signature proving the prover knows the private key for the output they're spending. Replaces the "I signed it" half of what CLSAG used to do. Includes FROST-style multisig.

I
DOUBLE-SPEND

Linkability (key images)

Key images survive — they're still emitted per input, still uniquely identify a spent output, still rejected on duplicate. The math is updated to suit the new key derivation, but the role is unchanged.

04 · the curve tree

§4Inside the curve tree

Every output that has ever existed on chain becomes a leaf in a giant tree. Each level of the tree is a Pedersen commitment to a fixed-arity batch of children. The whole tree's root sits in consensus state — every node maintains it incrementally as new blocks land. To spend, the prover demonstrates "I know a path from some leaf to this root, and I know the spend key of that leaf" — without revealing which leaf.

ROOT (Selene) in consensus state ↑ HELIOS layer C₁ C₂ ★C₃ C₄ ↑ SELENE layer c c c c c c c ★c c c c c ↑ LEAVES · outputs (Ed25519) ... ~150,000,000 outputs · every UTXO ever ... ★ real spent output (hidden from verifier) ★ orange path = the prover's real output — never revealed tree depth ≈ log(150M) ≈ 7 levels
1

Build

As blocks arrive, every node maintains the tree. New outputs become leaves, parent commitments are recomputed. The root is part of consensus — every full node agrees on it.

2

Prove

The prover's wallet walks the path from its real output up to the root, generating a ZK proof at each level showing "this commitment opens to the one below" — without revealing which child.

3

Verify

The verifier knows only the public root. The aggregated proof checks the entire path was traversed consistently. Tens of milliseconds. ~3 KB.

05 · the curve cycle

§5Why two new elliptic curves

A naive ZK proof over an elliptic curve has to do all its scalar arithmetic in the curve's scalar field. But the values it's proving statements about (Pedersen commitments) live in the curve's base field. The mismatch forces expensive emulation: simulating one field's arithmetic inside another, costing thousands of constraints per multiplication. FCMP++'s answer: use a pair of curves where this mismatch vanishes.

Wei25519 / Ed25519 existing Monero curve · holds the leaves unchanged — same key infrastructure HELIOS base field F_p scalar field F_q SELENE base field F_q scalar field F_p prove operations on Selene… …using arithmetic in Helios & vice versa "tower" over Ed25519 — leaves stay where they were THE TOWER CYCLE

The cycle property in one sentence

If Helios's base field is F_p and scalar field is F_q, then Selene's base field is F_q and scalar field is F_p. Points on Helios can be efficiently described by scalars on Selene, and vice versa. This is what makes the recursive tree-path proof tractable — each level of the tree alternates curves, and the arithmetic always "fits" the curve doing the proving.

Critically, the existing Ed25519 keys you already have do not change. Helios and Selene "tower over" Ed25519 — they're added above the existing curve, not replacing it. Your wallet keys, your historical outputs, your stealth address derivation: all preserved. This is what lets FCMP++ ship as a clean hard fork without forcing users to migrate funds to new key formats. That was the original FCMP plan, tied to the Seraphis next-gen protocol; the "++" version explicitly removes the Seraphis dependency.

06 · before vs after

§6The transaction · what changes, what stays

Surprisingly little of the transaction format dies. Stealth addresses, Pedersen commitments, range proofs, key images, the balance equation — all preserved. The change is surgical: swap CLSAG out, swap FCMP + GSP in. Everything that wasn't a ring signature continues working exactly as documented in the CLSAG/RingCT schema.

FieldToday (CLSAG · v16)After FCMP++
RECEIVER PRIVACY · unchanged
Stealth addressP = Hs(rKv)·G + KsSame. Sender derivation untouched.
View tags1-byte hint per output (since v15)Same.
Encrypted amountsecdhInfo via shared secretSame.
AMOUNT PRIVACY · unchanged
Pedersen commitmentsC = a·G + x·HSame.
Range proofsBulletproofs+Same family (BP+, possibly BP++ further out).
Balance equationΣ in − Σ out − fee·H = 0Same.
SENDER PRIVACY · this is the big change
Anonymity set16 ring members (15 decoys + real)Every output ever created (~150M+).
Selection methodGamma-distributed decoy samplingNone. The chain itself is the set.
Sender proofOne CLSAG σ = {s[16], c1, D} per inputOne FCMP membership proof + one GSP spend signature per input.
key_offsets15 deltas pointing at ring membersGone. The proof references the root, not specific outputs.
Per-input size~640 bytes (CLSAG @ ring 16)~3 KB (FCMP proof + GSP sig), independent of chain size.
DOUBLE-SPEND PROTECTION · unchanged role
Key imageI = x·Hp(P), in vin.k_imageStill emitted per input. Math updated for the new key derivation. Same uniqueness guarantee.

Tradeoffs at a glance

+

~10M× anon set

From 16 to ~150 million. Statistical deanonymization becomes effectively impossible.

+

No decoy selection

An entire class of timing & flooding attacks evaporates because there is no selection algorithm to attack.

±

Tx size grows

~3 KB per input vs ~640 B today. Net per-tx growth is moderate because rings (which scaled with members) go away.

±

Proof gen takes longer

Generating an FCMP++ proof is more compute than signing CLSAG. Verification stays fast though (~tens of ms).

07 · the "++" suffix

§7Why it's called FCMP plus plus

The original "FCMPs" proposal (MoneroKon 2023) was designed to ship alongside Seraphis — the planned next-generation transaction protocol with new key formats and a redesigned RingCT. That coupling kept FCMPs in research limbo while Seraphis itself was still being designed. In March 2024, during a spam-attack debate, kayabaNerve proposed an alternative.

f
THE F

Full-chain

Anonymity over every output, not a sampled subset. The defining feature.

cm
THE CM

Curve-tree Membership

Proof that the spent output is in the curve-tree of all outputs. The "M" verb.

p
THE P

Proofs

Plural — one per input. Each proof is independent and combinable.

+
FIRST +

Spend Authorization (SA)

The Generalized Schnorr Protocol sig. Replaces the "I signed it" half of CLSAG, so FCMPs can deploy without Seraphis providing it.

+
SECOND +

Linkability (L)

Key images — the double-spend prevention layer that the original FCMPs design delegated to Seraphis. The "++" version reintroduces them directly.

CONSEQUENCE

No Seraphis required

FCMP++ ships as a hard fork to today's RingCT-style txs. Seraphis itself remains a longer-term project, no longer blocking the privacy upgrade.

08 · roadmap

§8Where it is right now

FCMP++ has been under active development since 2024, with funding through Monero's Community Crowdfunding System. Spec, implementation, sub-circuit verification, and a first audit have all completed. The remaining steps are integration audit and the actual hard fork. Current status (as of mid-2026):

JUL 2023
FCMPs announced at MoneroKon
First public presentation of full-chain membership proofs. Coupled to the (separate) Seraphis project. Anonymity set proposed: effectively unlimited.
MAR 2024
FCMP++ proposed
kayabaNerve publishes the "FCMPs+SA+L" proposal — adding Spend Authorization and Linkability so the upgrade can ship without waiting for Seraphis. CCS funding proposal opens.
2024
Implementation begins
Rust implementations of helioselene, ec-divisors, the arithmetic circuit, the Generalized Schnorr Protocol, and a 2-round FROST-style multisig variant.
APR–MAY 2025
Veridise sub-circuit audit
Formal verification of each ZK sub-circuit using the Picus tool. Result: no critical or high-severity findings. Minor maintainability issues addressed during development.
AUG 2025
Optimization competition concludes
Community contest for optimizing the helioselene and ec-divisors libraries. Winner achieved ~22% speedup. Subsequent improvements push it further.
JAN 2026
FCMP++ paper v0.5.2 published
Latest specification of the protocol. Defines the exact gadgets, the GSP construction, the integration with existing key formats.
MAY 2026
Trail of Bits integration audit
Two-week audit of the FCMP++ 1a/1b integration into the main monerod codebase. The final pre-fork de-risking step.
MID-LATE 2026
Hard fork activation (tentative)
Pending audit results and dev-meeting consensus. Once activated, every spend on chain uses FCMP++ — ring signatures cease to exist in new Monero txs. Old txs on chain remain valid history.
POST-FORK
Wallet-side features unlocked
FCMP++ enables transaction chaining, outgoing view keys (audit-only key for outbound activity), and other capabilities that depend on the new proof structure. Rolled out gradually after the protocol hard-forks.
2027+
Seraphis integration (still planned)
With FCMP++ standalone-deployed, Seraphis becomes a clean-up and key-format-modernization project. Much of its membership-proof work is already done thanks to FCMP++.