This release introduces major performance optimizations across the execution pipeline, delivering up to 3× faster processing under typical workloads. Improvements span database access, caching, and background execution paths, significantly reducing block execution times.
In parallel, L2 nodes now feature complete blob support under Fusaka.
Installation and running instructions can be found in our docs
💥 BREAKING CHANGES
-
due to
307d0ed- allow setting a target gas limit through CLI (PR #4973 by @MegaRedHand):allow setting a target gas limit through CLI (#4973)
-
due to
3e9705b- unify trie node encoding (PR #4995 by @iovoid):unify trie node encoding (#4995)
✨ New Features
de0802e- l1: running some GenServers in dedicated threads (PR #4925 by @ElFantasma)307d0ed- l1: allow setting a target gas limit through CLI (PR #4973 by @MegaRedHand)↘️ addresses issue #4482 opened by @MegaRedHand
417aafc- l2: generate batch prover input at commit and store it in db (PR #5006 by @ilitteri)db38cc9- l2: implement operator fee (PR #4725 by @avilagaston9)↘️ addresses issue #4694 opened by @avilagaston9
4514172- l1,l2: add CLI option to force color output mode (PR #5034 by @ManuelBilbao)c638968- l2: implement l1 fee (PR #4781 by @avilagaston9)↘️ addresses issue #4696 opened by @avilagaston9
4df1f44- l2: aligned mode support for multiprover (PR #3429 by @xqft)556f2de- l1,l2: support fusaka blobs cell_proofs (PR #4814 by @tomip01)c04173a- l2: reject privileged transactions in p2p messages (PR #5086 by @tomip01)084c899- l1: block size limit in building (PR #4397 by @SDartayet)5bc0f9e- l1: reintroduce ecrecover implementation usingsecp256k1for L1 (PR #4924 by @ilitteri)ac17740- l1,l2: support fusaka blobs cell_proofs (PR #5121 by @ManuelBilbao)
🐛 Bug Fixes
ed4f08c- l2: regenerate head state in node initialization (PR #4968 by @ilitteri)438fe9d- l1: remove duplicate span.entered() call in apply_updates (PR #4970 by @MegaRedHand)4daa4ab- l1,l2: update binary names (PR #4980 by @ManuelBilbao)d13c5a8- l1,l2: add feature flag to decide precompute number (PR #4893 by @tomip01)516f4b2- l1: addengine_getBlobsV2to capabilities. (PR #5007 by @mpaulucci)6c39fc2- l2: update operator fee flag on makefile (PR #5029 by @tomip01)433b74f- levm: remove unneeded clone of transaction log (PR #5028 by @iovoid)3ff58e0- l1: update capabilities to include engine_getPayloadV5 (PR #5039 by @edg-l)cf9276b- l2: committer wake up delay (PR #5033 by @ManuelBilbao)c9b0005- l1: fix big account download stopping prematurely (PR #4994 by @fedacking)992bba3- l1: retry on no peers on update pivot (PR #5002 by @fedacking)07dcec0- l1: port 30303 still used after stopping the node (PR #5041 by @edg-l)↘️ fixes issue #4895 opened by @rodrigo-o
23c14ec- l1: modify Grafana dashboards so they can be filtered by instance (PR #4831 by @klaus993)3d3e2b6- l2: use checkpoints to persist previous batch state (PR #5037 by @ilitteri)a83b959- l1: stop block building preemptively (PR #4999 by @MegaRedHand)↘️ fixes issue #4992 opened by @MegaRedHand
4324c56- l1: track requested pooled transactions (PR #4962 by @fmoletta)deb26ff- l1: remove await in now sync call in levm_runner (PR #5072 by @MegaRedHand)53711cd- l2: override execution witness endpoint (PR #5063 by @avilagaston9)bcc677c- l1: fix ef_test check not compiling (PR #5078 by @edg-l)f335294- l1: fix exponential overflow in fake exponential (PR #5093 by @fedacking)37fe8e1- l1,l2: excludeethrex-l2cratemake test(PR #5100 by @ilitteri)ee97e8e- l2: remove one-time checkpoint if already exists (PR #5083 by @ilitteri)42b32e0- l2: remove one-time checkpoint if already exists (PR #5083 by @ilitteri)c228e18- l1,l2: inaccurate block execution metrics (PR #5108 by @Oppen)4ee0a46- l1: don't trigger snap sync if fcu head is already canonical (PR #4985 by @fmoletta)↘️ fixes issue #4846 opened by @mpaulucci
fb15bd9- l2: fixethrex-l2-commoncrate compilation (PR #5106 by @ilitteri)199dc90- l2: checkpoint initialization (PR #5123 by @avilagaston9)1f422e9- l1: fix illegal instructions in certain ARM processors (PR #5143 by @fedacking)b233284- l1: exit on irrecoverable error on sync (PR #5005 by @fedacking)db22fbc- l1,l2: make l2 integration tests and lint required (PR #5142 by @gianbelinche)59d2ccb- l2: save last committed batch as current checkpoint (PR #5152 by @ManuelBilbao)02c4468- l2: remove used checkpoints (PR #5120 by @gianbelinche)e8fce20- l2: setpendingPrivilegedTxIndexin initializer (PR #5161 by @ManuelBilbao)
⚡ Performance Improvements
f4170c7- levm: use bitmap for jumpdests (PR #4608 by @ilitteri)669700c- levm: store valid jump targets with code (PR #4961 by @jrchatruc)7a4b41b- l1, l2: use fxhash for diff layers (PR #5032 by @Oppen)8b0e2b8- l1: reusing FindNode message per lookup loop (PR #5047 by @ElFantasma)96e6433- l1, l2: move post-execution trie updates to the background (PR #4989 by @edg-l)73694e1- l1: run "engine_newPayload" block execution in a worker thread (PR #5051 by @Oppen)71bff69- l1: batch blobs validate (PR #4993 by @edg-l)667920f- levm: remove duplicate subgroup check in ecpairing precompile (PR #4960 by @MegaRedHand)↘️ addresses issue #4939 opened by @MegaRedHand
4d2fa0b- l1,l2: remove latest_block_header lock (PR #5050 by @Oppen)b2be4b7- l1: make trusted setup warmup non blocking (PR #5124 by @mpaulucci)6e16e8b- l1: add snapshot layer bloom filtering (qfilter version) (PR #5140 by @edg-l)6c7cb35- l1, l2: pipeline VM merklelization (PR #5084 by @pablodeymo)1748ddc- l1: improved discovery and peer initialization (PR #5147 by @ElFantasma)
♻️ Refactors
87ed562- l1,l2: remove unused dependency and import (PR #4936 by @MegaRedHand)c3e30f4- l1: make TrieError::InconsistentTree more specific (PR #4836 by @cdiielsi)↘️ addresses issue #4786 opened by @MegaRedHand
0e63e98- l1,l2: release workflow (PR #4986 by @ManuelBilbao)3e9705b- l1: unify trie node encoding (PR #4995 by @iovoid)5346ed2- l1: removeMutexfrom profiling metrics (PR #5031 by @MegaRedHand)ebb341b- l2: removeasyncfromBlockchain::new_evm(PR #5062 by @MegaRedHand)0323cc9- l1: remove unnecessary NodeRecord mutex (PR #5067 by @Oppen)ecbeda7- l1,l2: simplify Store::chain_config (PR #5071 by @Oppen)963889b- l2: use Url instead of String in EthClient (PR #5060 by @ManuelBilbao)c0f5846- l2: use pending txs index instead of removing from list (PR #5104 by @ManuelBilbao)
✅ Tests
3d38558- l1: polish test reports with timestamps and formatting (PR #4770 by @Signor1)↘️ addresses issue #3886 opened by @sofiazcoaga
🔧 Chores
55be0b3- l1: change the log of target peer to debug from warn (PR #4984 by @fedacking)5f2dbf6- l2: insert placeholder proxies for system contracts (PR #4930 by @ManuelBilbao)ec56d72- l1,l2: made so that the P2P logging functions say the correct file (PR #4971 by @fedacking)b27f106- l1, l2: remove rocksdb wal TTL (PR #4966 by @jrchatruc)ebbf9c5- l1: update lighthouse to a version that supports fusaka (PR #4991 by @mpaulucci)165782c- l1,l2: bump cargo toml version for 5.0.0 release (PR #4935 by @ManuelBilbao)1136d83- l1: improved logs for engine calls (PR #4987 by @fedacking)9f7443c- l1: improved snapync logs (PR #4983 by @fedacking)2b5cb55- l1: more execution metrics (PR #5052 by @edg-l)bbc60ca- l1: remove pending logs (PR #5076 by @fedacking)76f18f8- l1: improve snapsync log (PR #5077 by @edg-l)4c29824- l1: review p2p logs (PR #5046 by @fedacking)e85d508- l2: remove useless debug-purpose logs in proof coordinator (PR #5080 by @ManuelBilbao)d2f69d5- l1: movetoolingcrates to a different workspace (PR #4996 by @mpaulucci)8122c2a- l2: minimize cloning from Trie operations (PR #4763 by @xqft)353d589- l1: removed useless clones (PR #5061 by @fedacking)105ced6- l1: use Osaka in--devcommand (PR #5094 by @ManuelBilbao)60eb472- l1: filter instances in grafana through (PR #5088 by @rodrigo-o)↘️ addresses issue #5087 opened by @rodrigo-o
d4b20ef- l2: update stable RISC0 patches (PR #5102 by @ilitteri)378d60b- l2: usesubstrate-bnfor RISC0 (PR #5101 by @ilitteri)ba7b5d9- l1: improve healing logs (PR #5138 by @fedacking)bc46f8a- l1, l2: fix warning in ethrex-crypto when no feature is included (PR #5144 by @pablodeymo)