Monero's Seraphis Migration & FCMP++: A Technical Deep Dive
The Problem: Why Rings Aren't Enough
Since its launch, Monero has relied on ring signatures to obscure transaction origins. Each input is mixed with decoys - typically 15 other outputs - creating an anonymity set of 16. While effective for years, ring signatures have inherent limitations:
| Vulnerability | Description |
|---|---|
| EAE Attacks | Adversaries can manipulate decoy selection to reduce privacy |
| Chain Reorganizations | Rings can become invalid after chain reorgs |
| Statistical Analysis | Decoy selection algorithms can be exploited |
| Limited Anonymity Set | Only 16 outputs per input, not the full chain |
FCMP++ solves all of these by proving that an output being spent is one of any output on the entire blockchain - an anonymity set of over 100 million outputs.
What is FCMP++?
Full-Chain Membership Proofs (FCMP++) is a cryptographic protocol that replaces ring signatures with a merkle-tree based proof system.
How It Works
FCMP++ proves two things simultaneously:
- Membership: The output being spent exists in the blockchainβs output set
- Spend Authorization: The spender holds the private key for that output
The proof is constructed using a Bulletproofs-based circuit with optimizations for Merkle tree membership proofs.
The Architecture
The integration consists of several core components:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FCMP++ Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Rust FFI β C++ Core β
β βββββββββ β ββββββββ β
β β’ Helios/Selene β β’ Tree state management β
β curve math β β’ LMDB database updates β
β β’ FCMP++ β β’ Transaction construction β
β construction β β’ Transaction verification β
β β’ FCMP++ β β’ RPC routes β
β verification β β’ Wallet sync β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key technical details:
- The Rust code is compiled into a static library (
libfcmp_pp_rust.a) - C++ consumes it via a generated FFI header (
fcmp++.h) - The C++ layer manages the curve trees merkle tree - a new store for spendable outputs
- All existing valid outputs are inserted into the tree once unlocked
Why "++"?
FCMP++ is actually the second proposal. The first FCMP required the full Seraphis migration (new address format, invalidating all prior addresses). FCMP++ independently adds Spend Authorization + Linkability, removing the dependency on Seraphis. This means:
- β Faster to deploy - no full-chain migration required
- β No new address format - existing addresses continue to work
- β Same privacy benefits - anonymity set of millions
New Features Unlocked by FCMP++
Beyond massive privacy improvements, FCMP++ introduces several entirely new capabilities to Monero:
Transaction Chaining
Sign a transaction that spends another transaction before the spent transaction is published and mined. This enables layer-two designs such as payment channels.
Outgoing View Keys
Currently, Monero only has incoming view keys (detect received funds). Outgoing view keys allow detection of when received outputs are spent. This enables:
- Much more efficient cold wallet setups
- More efficient multisignature wallets
- A single unified "view key" (no incoming/outgoing distinction)
Forward Secrecy
Even with a quantum computer (discrete log oracle), an adversary cannot break privacy. This is a critical feature for long-term confidentiality.
Implementation Status & Roadmap
Current Status (Mid-2026)
The FCMP++ integration is actively being developed, audited, and tested:
| Component | Status |
|---|---|
| Code Integration | Multiple PRs open in the seraphis-migration/monero repository |
| Audit | Phase 1 audit in progress, planned completion before July 2026 |
| Testing | FCMP++/Carrot beta stressnet active |
| Wallet Implementation | CLI wallet supports sending/receiving with Carrot+FCMP |
Key Milestones
Q1-Q2 2026: FCMP++ Alpha Stressnet
βββ v1.5 released with improved validation and sync [reference:28]
βββ Memory consumption reduced
βββ Node sync performance improved
Q2 2026: Audit Phase 1
βββ Code review by Veridise (formal methods) [reference:29]
βββ Issues triaged and fixed [reference:30]
βββ Phase 1 completion before July [reference:31]
H2 2026: Production Deployment
βββ Piecemeal PRs submitted to main Monero repo [reference:32]
βββ Documentation finalized [reference:33]
βββ Hard fork activation
Performance Characteristics
Early testing has revealed the following metrics:
| Metric | Current (CLSAG) | FCMP++ |
|---|---|---|
| Verification time (1-input) | Fast | ~10x slower than 16-member CLSAG |
| Transaction size (2-in/2-out) | ~2,200 bytes | ~5,000 bytes |
| Transaction size (max) | ~1,500-2,200 bytes | ~10,000 bytes |
| Anonymity set | 16 | 100,000,000+ |
Note: The increased verification time is a trade-off for the dramatically larger anonymity set. Hardware improvements and future optimizations will mitigate this.
Wallet Changes & User Impact
Seed Compatibility
Your existing 25-word seed will still work. The spend secret key stays the same; the seed can restore a Seraphis/FCMP++ wallet.
New Wallet Features
- Faster syncing: Up to 50-60% speedup with clearnet nodes, 25-35% with local nodes
- New wallet tiers: Full view-only functionality without spend key
- Async scanner: Improved privacy for light wallets
What Users Need to Do
- Update your wallet software when the upgrade is deployed
- Your seed will restore your funds - no migration needed
- New addresses will be longer
What About Seraphis?
FCMP++ does NOT require the full Seraphis migration. The original Seraphis proposal introduced a new address format (invalidating all prior addresses) and a migration to a new anonymity set. FCMP++ achieves the same privacy benefits without:
- Invalidating existing addresses
- Requiring a full-chain migration
- Changing the address format
This is why FCMP++ is the path forward. Seraphis may still be implemented later, but FCMP++ delivers the critical privacy improvements much faster.
Why This Matters for Developers
If You Build on Monero
- Your integration will work - no breaking changes to address formats
- Better UX - faster sync, lower fees, better privacy
- New capabilities - transaction chaining enables new product designs
Preparing Your Application
- Stay updated on the FCMP++ deployment timeline
- Test your wallet integration on the stressnet
- Watch for RPC changes - new methods for
scan_tx, tree caching
Relevant Resources
Conclusion
The FCMP++ upgrade represents a paradigm shift in blockchain privacy:
| Before | After |
|---|---|
| Anonymity set of 16 | Anonymity set of 100,000,000+ |
| Vulnerable to statistical analysis | Mathematically unlinkable |
| No forward secrecy | Quantum-resistant privacy |
| No transaction chaining | Layer-two capable |
| Slow wallet sync | 50% faster sync |
Monero is becoming what it was always meant to be: truly private, truly scalable, and truly unstoppable. The code is being audited. The stressnet is running. The deployment is coming. If you care about privacy, this is the moment to pay attention.
π Resources
- FCMP++ Integration Docs
- Implementation Tracker
- Audit Overview
- Monero Blog: FCMP Development
- Monero Research Lab
This article reflects the state of Monero's FCMP++ integration as of July 2026. The protocol is under active development; details may change as the upgrade progresses toward mainnet deployment.
Comments
No comments yet. Start the discussion.