Skip to content

Latest commit

 

History

History
464 lines (254 loc) · 18.7 KB

File metadata and controls

464 lines (254 loc) · 18.7 KB

Ethrex Changelog

Perf

2026-03-30

  • Replace per-block thread spawning with persistent thread pool for merkleization #6344

2026-03-26

  • Eliminate stack-frame spill in Stack::push for zero-upper-limb values #6390
  • Use const-generic big-endian conversion in PUSH opcodes #6390

2026-03-05

  • Doubly pipelined merkleization with self-coordinating shard workers #6278
  • Switch hot EVM and mempool HashMaps to FxHashMap for faster hashing #6303

2026-03-02

  • SIMD-accelerate trie nibble operations for block execution #6286
  • Use FxHashMap in call frame backup #6286

2026-02-27

  • Use nested storage originals, FxHashMap call frame backup, and sstore-specific storage access helper #6265
  • Refactor LEVM opcode handlers to avoid expensive matches #4791

2026-02-25

  • Speed up snap sync validation with parallelism and deduplication #6191
  • Disable balance check for prewarming to avoid early reverts #6259

2026-02-24

  • Expand fast-path dispatch in LEVM interpreter loop #6245

2026-02-23

  • Check self before parent in Substate warm/cold lookups #6244
  • Add precompile result cache shared between warmer and executor threads #6243

2026-02-13

  • Optimize storage layer for block execution by reducing lock contention and allocations #6207

2026-02-06

  • Defer KZG blob proof verification from P2P to mempool insertion #6150
  • Cache ECDSA sender recovery in transaction structs #6153

2026-01-27

  • Optimize prewarmer by grouping transactions by sender #6047
  • Implement cache for EXTCODESIZE #6034

2026-01-23

  • Reuse cache in prewarm workers #5999

2026-01-21

  • Optimize debug_executionWitness by pre-serializing RPC format at storage time #5956
  • Use fastbloom as the bloom filter #5968
  • Improve snap sync logging with table format and visual progress bars #5977

2026-01-20

  • Remove ethrex-threadpool crate and move ThreadPool to ethrex-trie #5925
  • Add frame pointers setting to makefiles #5746
  • Remove Mutex<Box<_>> from DatabaseLogger::store to reduce contention #5930

2026-01-19

  • Use FxHashset for access lists #5864
  • Prewarm cache by executing in parallel #5906

2026-01-15

  • Reduce state iterated when calculating partial state transitions #5864

2026-01-13

  • Remove needless allocs in CALLDATACOPY/CODECOPY/EXTCODECOPY #5810
  • Inline common opcodes #5761
  • Improve ecrecover precompile by removing heap allocs and conversions #5709

2026-01-12

  • Refactor ecpairing using ark #5792

2025-12-23

  • Remove needless allocs on store api #5709

2025-12-22

  • Avoid double parsing and extra clones in doc signature formatting #9285

2025-12-19

  • Make HashSet use fxhash in discv4 peer_table #5688
  • Validate tx blobs after checking if it's already in the mempool #5686

2025-12-15

  • Parallelize storage merkelization #6079

2025-12-02

  • Avoid unnecessary hashing of init codes and already hashed codes #5397

2025-11-28

  • Change some calls from encode_to_vec().len() to .length() when wanting to get the rlp encoded length #5374
  • Use our keccak implementation for receipts bloom filter calculation #5454

2025-11-27

  • Use unchecked swap for stack #5439

2025-11-20

  • Improve rlp encoding by avoiding extra loops and remove unneeded array vec, also adding a alloc-less length method the default trait impl #5350

2025-11-19

  • Parallelize merkleization #5377

2025-11-17

  • Avoid temporary allocations when decoding and hashing trie nodes #5353

2025-11-13

  • Use specialized DUP implementation #5324
  • Avoid recalculating blob base fee while preparing transactions #5328
  • Use BlobDB for account_codes column family #5300

2025-11-12

  • Only mark individual values as dirty instead of the whole trie #5282
  • Separate Account and storage Column families in rocksdb #5055
  • Avoid copying while reading account code #5289
  • Cache BLOBBASEFEE opcode value #5288

2025-11-11

  • Insert instead of merge for bloom rebuilds #5223
  • Replace sha3 keccak to an assembly version using ffi #5247
  • Fix FlatKeyValue generation on fullsync mode #5274

2025-11-10

  • Disable RocksDB compression #5223

2025-11-07

  • Reuse stack pool in LEVM #5179

2025-11-05

  • Merkelization backpressure and batching #5200

2025-11-03

  • Avoid unnecessary hash validations #5167
  • Merge execution with some post-execution validations #5170

2025-10-31

  • Reduce overhead of trie opening #5145
  • Improved discovery and peer initialization #5147

2025-10-30

  • Pipeline Merkleization and Execution #5084
  • Add bloom filters to snapshot layers #5112
  • Make trusted setup warmup non blocking #5124

2025-10-28

  • Batch BlobsBundle::validate #4993
  • Remove latest_block_header lock #5050

2025-10-27

  • Run "engine_newPayload" block execution in a dedicated worker thread. #5051
  • Reusing FindNode message per lookup loop instead of randomizing the key for each message. #5047

2025-10-23

  • Move trie updates post block execution to a background thread. #4989.

2025-10-21

  • Instead of lazy computation of blocklist, do greedy computation of allowlist and store the result, fetch it with the DB. #4961

2025-10-20

  • Remove duplicate subgroup check in ecpairing precompile #4960

2025-10-17

  • Replaces incremental iteration with a one-time precompute method that scans the entire bytecode, building a BitVec<u8, Msb0> where bits mark valid JUMPDEST positions, skipping PUSH1..PUSH32 data bytes.
  • Updates is_blacklisted to O(1) bit lookup.

2025-10-14

  • Improve get_closest_nodes p2p performance #4838

2025-10-13

  • Remove explicit cache-related options from RocksDB configuration and reverted optimistic transactions to reduce RAM usage #4853
  • Remove unnecesary mul in ecpairing #4843

2025-10-06

  • Improve block headers vec handling in syncer #4771
  • Refactor current_step sync metric from a Mutex<String> to a simple atomic. #4772

2025-10-01

  • Change remaining_gas to i64, improving performance in gas cost calculations #4684

2025-09-30

  • Downloading all slots of big accounts during the initial leaves download step of snap sync #4689
  • Downloading and inserting intelligently accounts with the same state root and few (<= slots) #4689
  • Improving the performance of state trie through an ordered insertion algorithm #4689

2025-09-29

  • Remove OpcodeResult to improve tight loops of lightweight opcodes #4650

2025-09-24

  • Avoid dumping empty storage accounts to disk #4590

2025-09-22

  • Improve instruction fetching, dynamic opcode table based on configured fork, specialized push_zero in stack #4579

2025-09-17

  • Refactor bls12_g1add to use lambdaworks #4500
  • Refactor bls12_g2add to use lambdaworks #4538

2025-09-15

  • Fix caching mechanism of the latest block's hash #4479

  • Add jemalloc as an optional global allocator used by default #4301

  • Improve time when downloading bytecodes from peers #4487

2025-09-11

  • Add RocksDB as an optional storage engine #4272

2025-09-10

  • Implement fast partition of TrieIterator and use it for quickly responding GetAccountRanges and GetStorageRanges #4404

2025-09-09

  • Refactor substrate backup mechanism to avoid expensive clones #4381

2025-09-02

  • Use x86-64-v2 cpu target on linux by default, dockerfile will use it too. #4252

2025-09-01

  • Process JUMPDEST gas and pc together with the given JUMP JUMPI opcode, improving performance. #4220

2025-08-29

  • Improve P2P mempool gossip performance #4205

2025-08-28

  • Improve precompiles further: modexp, ecrecover #4168

2025-08-27

  • Improve memory resize performance #4117

2025-08-25

  • Improve calldatacopy opcode further #4150

2025-08-22

  • Improve Memory::load_range by returning a Bytes directly, avoding a vec allocation #4098

  • Improve ecpairing (bn128) precompile #4130

2025-08-20

  • Improve BLS12 precompile #4073

  • Improve blobbasefee opcode #4092

  • Make precompiles use a constant table #4097

2025-08-19

  • Improve addmod and mulmod opcode performance #4072

  • Improve signextend opcode performance #4071

  • Improve performance of calldataload, calldatacopy, extcodecopy, codecopy, returndatacopy #4070

2025-08-14

  • Use malachite crate to handle big integers in modexp, improving perfomance #4045

2025-07-31

  • Cache chain config and latest canonical block header #3878

  • Batching of transaction hashes sent in a single NewPooledTransactionHashes message #3912

  • Make JUMPDEST blacklist lazily generated on-demand #3812

  • Rewrite Blake2 AVX2 implementation (avoid gather instructions and better loop handling).

  • Add Blake2 NEON implementation.

2025-07-30

  • Add a secondary index keyed by sender+nonce to the mempool to avoid linear lookups #3865

2025-07-24

  • Refactor current callframe to avoid handling avoidable errors, improving performance #3816

  • Add shortcut to avoid callframe creation on precompile invocations #3802

2025-07-21

  • Use rayon to recover the sender address from transactions #3709

2025-07-18

  • Migrate EcAdd and EcMul to Arkworks #3719

  • Add specialized push1 and pop1 to stack #3705

  • Improve precompiles by avoiding 0 value transfers #3715

  • Improve BlobHash #3704

    Added push1 and pop1 to avoid using arrays for single variable operations.

    Avoid checking for blob hashes length twice.

2025-07-17

  • Use a lookup table for opcode execution #3669

  • Improve CodeCopy perfomance #3675

  • Improve sstore perfomance further #3657

2025-07-16

  • Improve levm memory model #3564

2025-07-15

2025-07-10

  • Add AVX256 implementation of BLAKE2 #3590

2025-07-08

  • Improve sstore opcodes #3555

2025-07-07

2025-06-30

2025-06-27

  • Reduce handle_debug runtime cost #3356
  • Improve U256 decoding and PUSHX #3332

2025-06-26

  • Refactor jump opcodes to use a blacklist on invalid targets.

2025-06-20

  • Use a lookup table for opcode parsing #3253
  • Use specialized PUSH1 and PUSH2 implementations #3262

2025-05-27

  • Improved the performance of shift instructions. 2933

  • Refactor Patricia Merkle Trie to avoid rehashing the entire path on every insert 2687

2025-05-22

  • Add immutable cache to LEVM that stores in memory data read from the Database so that getting account doesn't need to consult the Database again. 2829

2025-05-20

  • Reduce account clone overhead when account data is retrieved 2684

2025-04-30

  • Reduce transaction clone and Vec grow overhead in mempool 2637

2025-04-28

  • Make TrieDb trait use NodeHash as key 2517

2025-04-22

  • Avoid calculating state transitions after every block in bulk mode 2519

  • Transform the inlined variant of NodeHash to a constant sized array 2516

2025-04-11

  • Removed some unnecessary clones and made some functions const: 2438

  • Asyncify some DB read APIs, as well as its users #2430

2025-04-09

  • Fix an issue where the table was locked for up to 20 sec when performing a ping: 2368

2025-04-03

  • Fix a bug where RLP encoding was being done twice: #2353, check the report under docs/perf_reports for more information.

2025-04-01

  • Asyncify DB write APIs, as well as its users #2336

2025-03-30

  • Faster block import, use a slice instead of copy #2097

2025-02-28

  • Don't recompute transaction senders when building blocks #2097

2025-03-21

  • Process blocks in batches when syncing and importing #2174

2025-03-27

  • Compute tx senders in parallel #2268