DEV Community

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

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.