|
| 1 | +# Short– to Mid-Term Roadmap |
| 2 | + |
| 3 | +This document represents the **short- to mid-term roadmap**. |
| 4 | +Items listed here are actionable, concrete, and intended to be worked on in the coming weeks. |
| 5 | +Long-term research directions and second-order ideas are intentionally out of scope. |
| 6 | + |
| 7 | +**Priority reflects relative urgency, not effort.** |
| 8 | + |
| 9 | +This is a WIP document and it requires better descriptions; it's supposed to be used internally. |
| 10 | + |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## Priority Legend |
| 15 | + |
| 16 | +| Priority | Meaning | |
| 17 | +|---------:|---------| |
| 18 | +| 0 | Highest priority, low effort with potential win | |
| 19 | +| 1 | High. Should be addressed soon | |
| 20 | +| 2 | Medium. Important but not blocking | |
| 21 | +| 3 | Low. Useful improvement | |
| 22 | +| 4 | Very low. Nice to have | |
| 23 | +| 5 | Deprioritized for now | |
| 24 | +| 6 | Long tail / hygiene | |
| 25 | +| — | Not yet prioritized | |
| 26 | + |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## Execution |
| 31 | + |
| 32 | +| Item | Priority | Status | Description | |
| 33 | +|-----|----------|--------|-------------| |
| 34 | +| Replace BTreeMap with FxHashMap | 0 | In Progress | Replace BTreeMap/BTreeSet with FxHashMap/FxHashSet| |
| 35 | +| Skip Zero-Initialization in Memory Resize | 0 | Pending | Use unsafe set_len (EVM spec says expanded memory is zero) | |
| 36 | +| Remove RefCell from Memory | 0 | Pending | Consider using UnsafeCell with manual safety guarantees, or restructure to avoid shared ownership. | |
| 37 | +| Try out PEVM | 0 | In Progress | Benchmark again against pevm | |
| 38 | +| Inline Hot Opcodes | 0 | In Progress | Opcodes call a function in a jump table when some of the most used ones could perform better being inlined instead | |
| 39 | +| Test ECPairing libraries | 0 | Pending | Benchmark arkworks pairing in levm| |
| 40 | +| PGO/BOLT | 0 | Pending | Try out both [PGO](https://doc.rust-lang.org/beta/rustc/profile-guided-optimization.html) and [BOLT](https://github.com/llvm/llvm-project/tree/main/bolt) to see if we can improve perf | |
| 41 | +| Use an arena allocator for substate tracking | 0 | Pending | Substates are currently a linked list allocated through boxing. Consider using an arena allocator (e.g. bumpalo) for them | |
| 42 | +| ruint | 0 | Pending | Try out [ruint](https://github.com/recmo/uint) as the `U256` library to see if it improves performance. Part of SIMD initiative | |
| 43 | +| Nibbles | 1 | Pending | Nibbles are currently stored as a byte (`u8`), when they could be stored compactly as actual nibbles in memory and reduce by half their representation size | |
| 44 | +| RLP Duplication | 1 | Pending | Check whether we are encoding/decoding something twice (clearly unnecessary) | |
| 45 | +| Object pooling | 2 | Pending | Reuse EVM stack frames to reduce allocations and improve performance | |
| 46 | +| Avoid clones in hot path | 2 | Pending | Avoid Clone on Account Load and check rest of the hot path | |
| 47 | +| SIMD Everywhere | 2 | Pending | There are some libraries that can be replaced by others that use SIMD instructions for better performance | |
| 48 | + |
| 49 | + |
| 50 | +--- |
| 51 | + |
| 52 | +## IO |
| 53 | + |
| 54 | +| Item | Priority | Status | Description | |
| 55 | +|-----|----------|--------|-------------| |
| 56 | +| Add Block Cache (RocksDB) | 0 | Pending | Currently there is no explicit block cache, relying on OS page cache. Also try row cache | |
| 57 | +| Use Two-Level Index (RocksDB) | 0 | Pending | Use Two-Level Index with Partitioned Filters | |
| 58 | +| Enable unordered writes for State (RocksDB) | 0 | Pending | For `ACCOUNT_TRIE_NODES, STORAGE_TRIE_NODES cf_opts.set_unordered_write(true);` Faster writes when we don't need strict ordering| |
| 59 | +| Increase Bloom Filter (RocksDB) | 0 | Pending | Change and benchmark higher bits per key for state tables | |
| 60 | +| Consider LZ4 for State Tables (RocksDB) | 0 | Pending | Trades CPU for smaller DB and potentially better cache utilization | |
| 61 | +| Add Read-Ahead for Sequential Scans (RocksDB)| 0 | Pending | Use for trie iteration, sync operations | |
| 62 | +| Optimize for Point Lookups (RocksDB) | 0 | Pending | Adds hash index inside FlatKeyValue for faster point lookups | |
| 63 | +| Modify block size (RocksDB) | 0 | Pending | Benchmark different block size configurations | |
| 64 | +| Memory-Mapped Reads (RocksDB) | 0 | Pending | Can be an improvement on high-RAM systems | |
| 65 | +| Increase layers commit threshold | 0 | Pending | For read-heavy workloads with plenty of RAM | |
| 66 | +| Remove locks | 1 | Pending | Check if there are still some unnecessary locks, e.g. in the VM we have one | |
| 67 | +| Benchmark bloom filter | 1 | Pending | Review trie layer's bloom filter, remove it or test other libraries/configurations | |
| 68 | +| Use multiget on trie traversal | 1 | Pending | Using multiget on trie traversal might reduce read time | |
| 69 | +| Spawned | 3 | Pending | [*Spawnify*](https://github.com/lambdaclass/spawned) io intensive components/flows. Mempool and Snapsync are top priorities | |
| 70 | + |
| 71 | +--- |
| 72 | + |
| 73 | +## ZK + L2 |
| 74 | + |
| 75 | +| Item | Priority | Status | Description | |
| 76 | +|-----|----------|--------|-------------| |
| 77 | +| ZK API | 1 | Pending | Improve prover API to unify multiple backends | |
| 78 | +| Native Rollups | 2 | Pending | Add EXEC Precompile POC | |
| 79 | +| Based Rollups | 2 | Pending | [Based Rollups Roadmap](https://docs.ethrex.xyz/l2/roadmap.html) | |
| 80 | +| Zisk | 2 | In Progress | Integrate full Zisk Proving on the L2 | |
| 81 | +| zkVMs | 2 | In Progress | Make GuestProgramState more strict when information is missing | |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +## SnapSync |
| 88 | + |
| 89 | +| Item | Priority | Status | Description | |
| 90 | +|-----|----------|--------|-------------| |
| 91 | +| Download receipts and blocks | 1 | Pending | After snap sync is finished and the node is executing blocks, it should download all historical blocks and receipts in the background | |
| 92 | +| Download headers in background (no rewrite) | 1 | Pending | Download headers in background | |
| 93 | +| Avoid copying trie leaves when inserting (no rewrite) | 1 | Pending | Avoid copying trie leaves when inserting | |
| 94 | +| Rewrite snapsync | 4 | Pending | Use Spawned for snapsync | |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +## UX / DX |
| 99 | + |
| 100 | +| Item | Priority | Status | Description | |
| 101 | +|-----|----------|--------|-------------| |
| 102 | +| Improve internal documentation | 0 | In Progress | Improve internal docs for developers, add architecture | |
| 103 | +| geth db migration tooling | 0 | In Progress | As we don't support pre-merge blocks we need a tool to migrate other client's DB to ours at a specific block | |
| 104 | +| Add MIT License | 0 | Pending | Add dual license | |
| 105 | +| Add Tests | 1 | In Progress | Improve coverage | |
| 106 | +| Add Fuzzing | 1 | In Progress | Add basic fuzzing scenarios | |
| 107 | +| Add Prop test | 1 | In Progress | Add basic property testing scenarios | |
| 108 | +| Add security runs to CI | 1 | In Progress | Add fuzzing and every security tool we have to the CI | |
| 109 | +| CLI Documentation| 1 | Pending | Review CLI docs and flags | |
| 110 | +| API Documentation| 1 | Pending | Add API documentation to docs. Add compliance matrix | |
| 111 | +| IPv6 support | 1 | Pending | IPv6 is not fully supported | |
| 112 | +| P2P leechers | 1 | Pending | Improve scoring heuristic and kick leechers | |
| 113 | +| Custom Deterministic Benchmark | 1 | In Progress | We have a tool to run certain mainnet blocks, integrate that tool into our pipeline for benchmarking (not easy with DB changes) | |
| 114 | +| Benchmark contract call & simple transfers | 1 | Pending | Create a new benchmark with contract call & simple transfers | |
| 115 | +| Improve Error handling | 1 | In Progress | Avoid panic, unwrap and expect | |
| 116 | +| Websocket subscriptions | 2 | Pending | Add subscription support for websocket | |
| 117 | +| Not allow empty blocks in dev mode | 2 | Pending | For L2 development it's useful not to have empty blocks | |
| 118 | +| P2P rate limiting | 3 | Pending | Improve scoring heuristic and DDoS protection | |
| 119 | +| Migrations | 4 | Pending | Add DB Migration mechanism for ethrex upgrades | |
| 120 | +| No STD | 5 | Pending | Support WASM target for some crates related to proving and execution. Useful for dApp builders and light clients | |
| 121 | + |
| 122 | +--- |
| 123 | + |
| 124 | +## New Features |
| 125 | + |
| 126 | +| Item | Priority | Status | Description | |
| 127 | +|-----|----------|--------|-------------| |
| 128 | +| Block-Level Access Lists | 2 | In Progress | Implement [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) | |
| 129 | +| Disc V5 | 2 | In Progress | Add discV5 Support | |
| 130 | +| Sparse Blobpool | — | Pending | Implement [EIP-8070](https://eips.ethereum.org/EIPS/eip-8070) | |
| 131 | +| Pre merge blocks | — | Pending | Be able to process pre merge blocks | |
| 132 | +| Archive node | — | Pending | Allow archive node mode | |
0 commit comments