Skip to content

feat(levm): add in memory db for AccountUpdates #2638

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 19 commits into from
Closed

Conversation

JereSalo
Copy link
Contributor

@JereSalo JereSalo commented Apr 29, 2025

Motivation

  • Make get_state_transitions() faster by not checking the database for each account and storage slot in the cache.

Description

  • I've come to the conclusion that the best solution for the problem is to have an in_memory_db that saves the data read from the db every time we read from it. It provides us with 100% accuracy when getting account updates.
    • I have to think about this solution though..

Closes #issue_number

@JereSalo JereSalo added the levm Lambda EVM implementation label Apr 29, 2025
@JereSalo JereSalo self-assigned this Apr 29, 2025
Copy link

github-actions bot commented Apr 29, 2025

Lines of code report

Total lines added: 37
Total lines removed: 0
Total lines changed: 37

Detailed view
+----------------------------------------+-------+------+
| File                                   | Lines | Diff |
+----------------------------------------+-------+------+
| ethrex/crates/vm/backends/levm/mod.rs  | 643   | +5   |
+----------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/db/gen_db.rs | 220   | +32  |
+----------------------------------------+-------+------+

Copy link

github-actions bot commented Apr 29, 2025

EF Tests Comparison

Same results between main branch and the current PR.

Copy link

github-actions bot commented Apr 29, 2025

Benchmark Results Comparison

PR Results

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Factorial 233.3 ± 0.4 232.8 233.9 1.00
levm_Factorial 878.8 ± 7.1 872.0 893.7 3.77 ± 0.03

Benchmark Results: Factorial - Recursive

Command Mean [s] Min [s] Max [s] Relative
revm_FactorialRecursive 1.374 ± 0.067 1.302 1.512 1.00
levm_FactorialRecursive 13.061 ± 0.200 12.913 13.489 9.51 ± 0.49

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Fibonacci 207.5 ± 1.3 204.2 209.2 1.00
levm_Fibonacci 878.3 ± 10.1 868.2 904.9 4.23 ± 0.06

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ManyHashes 8.6 ± 0.1 8.5 8.7 1.00
levm_ManyHashes 17.4 ± 0.1 17.2 17.6 2.03 ± 0.02

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
revm_BubbleSort 3.186 ± 0.010 3.174 3.207 1.00
levm_BubbleSort 5.772 ± 0.042 5.725 5.846 1.81 ± 0.01

Benchmark Results: ERC20 - Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Transfer 244.0 ± 1.2 243.0 246.1 1.00
levm_ERC20Transfer 506.1 ± 3.2 501.0 509.2 2.07 ± 0.02

Benchmark Results: ERC20 - Mint

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Mint 139.7 ± 0.9 138.3 141.2 1.00
levm_ERC20Mint 321.7 ± 7.2 315.9 341.2 2.30 ± 0.05

Benchmark Results: ERC20 - Approval

Command Mean [s] Min [s] Max [s] Relative
revm_ERC20Approval 1.041 ± 0.010 1.029 1.060 1.00
levm_ERC20Approval 1.926 ± 0.015 1.898 1.942 1.85 ± 0.02

Main Results

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Factorial 242.0 ± 2.0 240.0 246.1 1.00
levm_Factorial 876.4 ± 3.6 871.6 883.1 3.62 ± 0.03

Benchmark Results: Factorial - Recursive

Command Mean [s] Min [s] Max [s] Relative
revm_FactorialRecursive 1.539 ± 0.118 1.415 1.702 1.00
levm_FactorialRecursive 13.179 ± 0.190 12.980 13.380 8.56 ± 0.67

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Fibonacci 208.2 ± 0.5 207.5 209.0 1.00
levm_Fibonacci 879.7 ± 9.0 870.0 896.5 4.23 ± 0.04

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ManyHashes 9.1 ± 0.4 8.8 10.2 1.00
levm_ManyHashes 17.8 ± 0.3 17.6 18.6 1.96 ± 0.09

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
revm_BubbleSort 3.262 ± 0.022 3.235 3.291 1.00
levm_BubbleSort 5.787 ± 0.043 5.735 5.856 1.77 ± 0.02

Benchmark Results: ERC20 - Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Transfer 258.5 ± 7.9 251.0 274.9 1.00
levm_ERC20Transfer 508.9 ± 3.0 504.6 515.4 1.97 ± 0.06

Benchmark Results: ERC20 - Mint

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Mint 144.5 ± 1.9 143.2 149.8 1.00
levm_ERC20Mint 324.3 ± 6.3 317.1 339.9 2.24 ± 0.05

Benchmark Results: ERC20 - Approval

Command Mean [s] Min [s] Max [s] Relative
revm_ERC20Approval 1.065 ± 0.007 1.053 1.077 1.00
levm_ERC20Approval 1.926 ± 0.013 1.911 1.953 1.81 ± 0.02

Base automatically changed from levm/acc_types_refactor to main April 29, 2025 22:54
@JereSalo
Copy link
Contributor Author

Replaced by #2616

@JereSalo JereSalo closed this May 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
levm Lambda EVM implementation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant