Skip to content

Commit 0364c59

Browse files
lferrignoCopilotjrchatruc
authored
docs(l1,l2): update roadmap (#5751)
This PR adds a short- to mid-term roadmap in Markdown format, extracted and structured from internal planning notes. The goal is to make current priorities explicit, shared, and easy to iterate on, without turning this into a long-term or aspirational roadmap. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Javier Chatruc <jrchatruc@gmail.com> Co-authored-by: Javier Rodríguez Chatruc <49622509+jrchatruc@users.noreply.github.com>
1 parent 55d9d50 commit 0364c59

File tree

4 files changed

+134
-41
lines changed

4 files changed

+134
-41
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ _(Data from main branch of each project at 2025/10/08)_
4545

4646
You can find our current and planned features in our roadmap page.
4747

48-
[View the roadmap →](https://docs.ethrex.xyz/l2/roadmap.html)
48+
[View the roadmap →](./ROADMAP.md)
4949

5050
## 📖 Documentation
5151

ROADMAP.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
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 |

docs/SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115

116116
# Roadmap
117117

118-
- [Roadmap](./roadmap.md)
118+
- [Roadmap](../ROADMAP.md)
119119

120120
# Other resources
121121

docs/roadmap.md

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)