## Wallet features - [x] Restore - [x] Sync - [x] Transfers - [x] Sweeps - [x] Support >8 input txs - #57 - [x] Payments to integrated address - #61 - [ ] `scan_tx` - https://github.com/seraphis-migration/monero/pull/49 - #89 - [x] Background sync - [ ] Hot/cold wallet integration - #51 - #52 - [ ] HW wallet interface changes - https://github.com/seraphis-migration/monero/issues/63 - [ ] Knowledge proofs - #270 - [ ] Multisig - #291 - [ ] 3rd party HW wallet integrations - Helpful link: https://github.com/seraphis-migration/monero/issues/63 - [ ] Trezor - [ ] Ledger - [ ] Clean up CLI references to rings in UI - #308 - [ ] Clean up GUI references to rings - [ ] Wallet RPC `describe_transfer` command for Carrot transaction proposals - Resolved by: https://github.com/seraphis-migration/monero/issues/52 - [ ] Don't remove existing tx dests when opening an old wallet with the new software - https://github.com/seraphis-migration/monero/pull/106 - [x] Don't need `simple_wallet::prompt_if_old` after fork - [x] Don't need `Transaction spends more than one very old outputs. Privacy would be better if they were sent separately.` after FCMP++. - [x] #305 - [x] Remove block hashes download on restore - #81 - [x] Speed up `prove()` - https://github.com/kayabaNerve/fcmp-plus-plus/issues/34 - Integrate faster `prove()` into fcmp++-stage - Solved by https://github.com/seraphis-migration/monero/pull/93 - [x] When the CLI identifies a receives and requires password and/or user inputs the wrong password, make block popping instant - See [this comment](https://github.com/seraphis-migration/monero/blob/8fb0f5631bc83525743ee8c73f01bd71db449670/src/wallet/wallet2.cpp#L3364) - https://github.com/seraphis-migration/monero/pull/96 ## Daemon features - [x] Build FCMP++ tree - [x] DB migration for FCMP++ tree - [x] Validate FCMP++ txs - [x] Validate Carrot txs - [x] Include init sync data needed to restore a wallet from arbitrary restore height - [x] Include FCMP++ tree root and n tree layers in PoW hash - [x] Prohibit torsioned outputs at consensus - [ ] Endpoint to get path by output id - #49 - #89 - [x] Hardened tx weight calculations (#44) - #232 - Revisit FCMP++ [transaction weight limit](https://github.com/seraphis-migration/monero/pull/57#discussion_r2272077568) since a 128-in tx can be bigger than 1/2 the penalty free block size - [x] Dynamic block weight changes - Proposed: https://github.com/ArticMine/Monero-Documents/blob/master/MoneroScaling2025-07.pdf - [ ] PoW-enabled relay (PoWER) - #230 - https://github.com/monero-project/research-lab/issues/133 - [ ] [RandomX commitments w/double hashing](https://github.com/monero-project/monero/issues/8827) - https://github.com/monero-project/monero/pull/10038 - [x] https://github.com/monero-project/monero/issues/10142 - Resolved by cache input verification results - [x] #388 - [ ] #389 - [ ] Tx relay v2 ## Known bugs - [x] #45 - #81 may help - [x] #46 - #81 may help - [x] @nahuhh reported a segfault in wallet, broken wallet state - Should be fixed by #39 and #59 - [x] Sweep when some txs don't cover fees. - Mitigated by #51. - Should be fixed by #54. - [x] Handle uncaught errors in tx construction (e.g. no unlocked outputs triggering "no input candidates provided" currently breaks the RPC wallet) - Possibly https://github.com/seraphis-migration/monero/pull/61 - Add a functional test for error handling in the RPC wallet - [x] Sporadic failure in `k_anonymity` functional test ([link](https://github.com/seraphis-migration/monero/pull/50#issuecomment-2940488580)) - Maybe this one is ok to leave for now since allowing >8 inputs per tx should solve it. - [x] Handle tx dests taking Carrot changes into account. - https://github.com/seraphis-migration/monero/pull/61 - [x] Handle tx priv keys taking Carrot changes into account. - https://github.com/seraphis-migration/monero/pull/61 - [x] Fee-included transfers. - https://github.com/seraphis-migration/monero/pull/61 - [x] `wallet2::get_payment_id` updated for Carrot. - https://github.com/seraphis-migration/monero/pull/61 - [x] Require new wallets point to updated daemon (required for building the tree from an arbitrary restore height) - #58 - [x] #70 - [x] Blockchain import should add locked outputs and update FCMP++ tree (#311) - [x] Fix `monero-blockchain-prune` utility - #196 - [ ] Creating watch-only wallet from full wallet, `wallet2::import_blockchain` has a FIXME for tree - [ ] Fix CLI/RPC displaying locked status of time-based locked outputs after FCMP++ fork - #353 ## Misc. - [ ] Complete the beta stressnet - [ ] Complete all FCMP++ research audit tasks - [x] Need @kayabaNerve signoff on GBP fix and completion of open issues: https://github.com/monero-oxide/monero-oxide/commit/cba7117d2cb4a45444c54005604b2a943a8517f1 - [ ] helioselene completed review by Least Authority - [ ] Circuit + gadgets impl re-review - [ ] Complete the FCMP++ integration audit - [x] Phase 1 - [ ] mx25519 lib audit - [x] Use new unbiased hash to point for Carrot outputs - https://github.com/seraphis-migration/monero/blob/64190feb26151e186b86c27bcd7c08e2ca09db6b/src/crypto/crypto.cpp#L650-L653 - Set the tree up here: https://github.com/j-berman/monero/commits/unbiased-hash-curve-trees/ - [x] FFI cleanup - #39 - #90 - #91 - [x] #43 - [x] #40 - [x] Don't store output pubkeys and commitments in db twice - https://github.com/seraphis-migration/monero/pull/62 - [x] Test pre-RCT to FCMP++ - https://github.com/seraphis-migration/monero/pull/67 - [x] Clean up compile warnings - https://github.com/seraphis-migration/monero/pull/66 - [x] xmrig - [ ] p2pool - [ ] Block explorer - https://github.com/moneroexamples/onion-monero-blockchain-explorer/issues/335 - [ ] LWS - [ ] Updated documentation for the FCMP++ integration - #110 - [ ] Carrot integration documentation - Heuristics wallet implementers must keep in mind (e.g. zero-change dummies back to sender, input selection prefers powers of 2, 1/2-input probability) - New things users should understand (new priv keys, tx keys, tx proofs, view balance key) - [ ] Document general wallet changes users should keep in mind - Updated wallets must point to updated daemons, old wallets can point to updated daemons - Deprecated `scan_tx` scanning *future* txs relative to wallet sync height, faster wallet restore at high height - Updated wallets re-sync from restore height (in order to sync tree) - [ ] Document general daemon changes users should keep in mind - Long migration - Deprecated building on top of alt chains - [x] Make sure functional tests pass excluding the HF from `hardforks.cpp` too - #111 - [x] Use optimized libs (https://github.com/j-berman/fcmp-plus-plus-optimization-competition) - [x] https://github.com/seraphis-migration/monero/pull/93 - [x] Remove static proof len table and use the latest fast proof len size calc from the FCMP++ lib instead - Move the static proof len table into a test just to sanity check the proof len size calc - #339 - [x] make sure the wallet's version compatibility check is testing for compatibility with the first FCMP++ compatible daemon [here](https://github.com/seraphis-migration/monero/blob/8e2009ad8e078ac03b6ca5409223246b30a42f49/src/wallet/wallet2.cpp#L6663) - Handled via #350 ## On hold - [x] ~~Blinds cache (#25)~~ (no longer necessary thanks to contest success) - [x] ~~Update references to "weight" instead of "bytes" as necessary~~ - Not necessary for launch once #232 is in, since weight will be much closer to bytes with that change.
Wallet features
scan_txdescribe_transfercommand for Carrot transaction proposalssimple_wallet::prompt_if_oldafter forkTransaction spends more than one very old outputs. Privacy would be better if they were sent separately.after FCMP++.prove()prove()into fcmp++-stageDaemon features
prevalidate_miner_transactionthat coinbase tx has at least one output #389Known bugs
k_anonymityfunctional test (link)wallet2::get_payment_idupdated for Carrot.wallet2::create_transactions_*()methods regarding payment IDs #70monero-blockchain-pruneutilitywallet2::import_blockchainhas a FIXME for treeMisc.
monero/src/crypto/crypto.cpp
Lines 650 to 653 in 64190fe
OutputContext, saving 65 bytes/output #62scan_txscanning future txs relative to wallet sync height, faster wallet restore at high heighthardforks.cpptooOn hold
Blinds cache (fcmp++: cache that blinds branches and outputs in the background #25)(no longer necessary thanks to contest success)Update references to "weight" instead of "bytes" as necessary