diff --git a/.dockerignore b/.dockerignore index 131dced67e..524c471179 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,7 +8,7 @@ **/*.rs.bk cmd/ef_tests/blockchain/vectors -cmd/ef_tests/levm/vectors +cmd/ef_tests/state/vectors **/.DS_Store **/.vscode @@ -24,4 +24,4 @@ crates/levm_mlir/ethtests crates/levm_mlir/*.tar.gz # used by Flamegraph and Samply -cmd/ef_tests/levm/levm_perfgraphs +cmd/ef_tests/state/levm_perfgraphs diff --git a/.github/scripts/publish_levm_ef_tests.sh b/.github/scripts/publish_levm_ef_tests.sh index b24b3e2020..f0dcfda9e5 100644 --- a/.github/scripts/publish_levm_ef_tests.sh +++ b/.github/scripts/publish_levm_ef_tests.sh @@ -1,3 +1,3 @@ curl -X POST $1 \ -H 'Content-Type: application/json; charset=utf-8' \ ---data "$(cat cmd/ef_tests/levm/levm_ef_tests_summary_slack.txt)" +--data "$(cat cmd/ef_tests/state/levm_ef_tests_summary_slack.txt)" diff --git a/.github/workflows/flamegraph_reporter.yaml b/.github/workflows/flamegraph_reporter.yaml index b2dad338e2..b696efbaa6 100644 --- a/.github/workflows/flamegraph_reporter.yaml +++ b/.github/workflows/flamegraph_reporter.yaml @@ -40,7 +40,7 @@ jobs: ${{ env.HOME }}/.cargo/bin/addr2line ${{ env.HOME }}/.cargo/bin/flamegraph ${{ env.HOME }}/.cargo/bin/inferno-* - ${{ env.HOME }}/ethrex/ethrex/cmd/ef_tests/levm/vectors + ${{ env.HOME }}/ethrex/ethrex/cmd/ef_tests/state/vectors key: ${{ runner.os }}-${{ env.RUST_VERSION }}-extra-binaries - name: Change perf settings @@ -91,7 +91,7 @@ jobs: - name: Download EF Tests run: | - if [ ! -f "$HOME/ethrex/ethrex/cmd/ef_tests/levm/vectors" ]; then + if [ ! -f "$HOME/ethrex/ethrex/cmd/ef_tests/state/vectors" ]; then cd crates/vm/levm make download-evm-ef-tests fi @@ -101,13 +101,13 @@ jobs: start_time=$(date +%s) if [ "${{ matrix.name }}" == "levm" ]; then - rm -rf target/debug/ef_tests_levm + rm -rf target/debug/ef_tests_state CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" \ - -p ef_tests-levm -- --tests stSolidityTest,stCallCodes + -p ef_tests-state --test all -- --tests stSolidityTest,stCallCodes elif [ "${{ matrix.name }}" == "revm" ]; then - rm -rf target/debug/ef_tests_levm + rm -rf target/debug/ef_tests_state CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" \ - -p ef_tests-levm -- --revm --tests stSolidityTest,stCallCodes + -p ef_tests-state --test all -- --revm --tests stSolidityTest,stCallCodes fi end_time=$(date +%s) diff --git a/.gitignore b/.gitignore index 688605e5f6..c33a8c30ba 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ debug/ cmd/ef_tests/blockchain/vectors -cmd/ef_tests/levm/vectors +cmd/ef_tests/state/vectors # Repos checked out by make target hive/ @@ -59,7 +59,7 @@ loc_report.json ethrex.redb # used by Flamegraph and Samply -cmd/ef_tests/levm/levm_perfgraphs +cmd/ef_tests/state/levm_perfgraphs *.svg prof_*.json prof.json diff --git a/Cargo.lock b/Cargo.lock index 75ead9051d..072e903aa2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2308,7 +2308,7 @@ dependencies = [ ] [[package]] -name = "ef_tests-levm" +name = "ef_tests-state" version = "0.1.0" dependencies = [ "bytes", diff --git a/Cargo.toml b/Cargo.toml index 69abdc3aec..4867a12adb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ members = [ "crates/common/rlp", "cmd/ethrex", "cmd/ef_tests/blockchain", - "cmd/ef_tests/levm", + "cmd/ef_tests/state", "cmd/ethrex_l2", "cmd/hive_report", "crates/vm/levm", diff --git a/Makefile b/Makefile index 329e598097..70ee6811d3 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ lint: ## ๐Ÿงน Linter check CRATE ?= * test: ## ๐Ÿงช Run each crate's tests - cargo test -p '$(CRATE)' --workspace --exclude ethrex-prover --exclude ethrex-levm --exclude ef_tests-blockchain --exclude ef_tests-levm --exclude ethrex-l2 -- --skip test_contract_compilation + cargo test -p '$(CRATE)' --workspace --exclude ethrex-prover --exclude ethrex-levm --exclude ef_tests-blockchain --exclude ef_tests-state --exclude ethrex-l2 -- --skip test_contract_compilation $(MAKE) -C cmd/ef_tests/blockchain test clean: clean-vectors ## ๐Ÿงน Remove build artifacts diff --git a/cmd/ef_tests/levm/Cargo.toml b/cmd/ef_tests/state/Cargo.toml similarity index 85% rename from cmd/ef_tests/levm/Cargo.toml rename to cmd/ef_tests/state/Cargo.toml index 6dcbbfb4ad..d2cb4edc1e 100644 --- a/cmd/ef_tests/levm/Cargo.toml +++ b/cmd/ef_tests/state/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ef_tests-levm" +name = "ef_tests-state" version.workspace = true edition.workspace = true @@ -33,12 +33,8 @@ revm = { version = "18.0.0", features = [ hex = "0.4.3" [lib] -path = "./ef_tests.rs" - -[[bin]] -name = "ef_tests_levm" -path = "tests/ef_tests_levm.rs" +path = "./lib.rs" [[test]] -name = "ef_tests_levm" +name = "all" harness = false diff --git a/cmd/ef_tests/levm/Makefile b/cmd/ef_tests/state/Makefile similarity index 100% rename from cmd/ef_tests/levm/Makefile rename to cmd/ef_tests/state/Makefile diff --git a/cmd/ef_tests/state/README.md b/cmd/ef_tests/state/README.md new file mode 100644 index 0000000000..5c496396fb --- /dev/null +++ b/cmd/ef_tests/state/README.md @@ -0,0 +1,9 @@ +# State Tests + +https://ethereum.github.io/execution-spec-tests/main/consuming_tests/state_test/ + +## Running the tests + +```bash +make run-evm-ef-tests +``` diff --git a/cmd/ef_tests/levm/deserialize.rs b/cmd/ef_tests/state/deserialize.rs similarity index 100% rename from cmd/ef_tests/levm/deserialize.rs rename to cmd/ef_tests/state/deserialize.rs diff --git a/cmd/ef_tests/levm/ef_tests.rs b/cmd/ef_tests/state/lib.rs similarity index 100% rename from cmd/ef_tests/levm/ef_tests.rs rename to cmd/ef_tests/state/lib.rs diff --git a/cmd/ef_tests/levm/parser.rs b/cmd/ef_tests/state/parser.rs similarity index 100% rename from cmd/ef_tests/levm/parser.rs rename to cmd/ef_tests/state/parser.rs diff --git a/cmd/ef_tests/levm/report.rs b/cmd/ef_tests/state/report.rs similarity index 100% rename from cmd/ef_tests/levm/report.rs rename to cmd/ef_tests/state/report.rs diff --git a/cmd/ef_tests/levm/runner/levm_runner.rs b/cmd/ef_tests/state/runner/levm_runner.rs similarity index 100% rename from cmd/ef_tests/levm/runner/levm_runner.rs rename to cmd/ef_tests/state/runner/levm_runner.rs diff --git a/cmd/ef_tests/levm/runner/mod.rs b/cmd/ef_tests/state/runner/mod.rs similarity index 100% rename from cmd/ef_tests/levm/runner/mod.rs rename to cmd/ef_tests/state/runner/mod.rs diff --git a/cmd/ef_tests/levm/runner/revm_runner.rs b/cmd/ef_tests/state/runner/revm_runner.rs similarity index 100% rename from cmd/ef_tests/levm/runner/revm_runner.rs rename to cmd/ef_tests/state/runner/revm_runner.rs diff --git a/cmd/ef_tests/levm/tests/ef_tests_levm.rs b/cmd/ef_tests/state/tests/all.rs similarity index 93% rename from cmd/ef_tests/levm/tests/ef_tests_levm.rs rename to cmd/ef_tests/state/tests/all.rs index bc7bd00cb7..25af6323b6 100644 --- a/cmd/ef_tests/levm/tests/ef_tests_levm.rs +++ b/cmd/ef_tests/state/tests/all.rs @@ -1,5 +1,5 @@ use clap::Parser; -use ef_tests_levm::{ +use ef_tests_state::{ parser, runner::{self, EFTestRunnerOptions}, }; diff --git a/cmd/ef_tests/levm/types.rs b/cmd/ef_tests/state/types.rs similarity index 100% rename from cmd/ef_tests/levm/types.rs rename to cmd/ef_tests/state/types.rs diff --git a/cmd/ef_tests/levm/utils.rs b/cmd/ef_tests/state/utils.rs similarity index 100% rename from cmd/ef_tests/levm/utils.rs rename to cmd/ef_tests/state/utils.rs diff --git a/crates/vm/levm/Makefile b/crates/vm/levm/Makefile index 8739b37132..5a8645220d 100644 --- a/crates/vm/levm/Makefile +++ b/crates/vm/levm/Makefile @@ -15,7 +15,7 @@ fmt: ## ๐Ÿ“„ Runs rustfmt cargo fmt --all ###### EF Tests ###### -EFTEST_DIR := ../../../cmd/ef_tests/levm +EFTEST_DIR := ../../../cmd/ef_tests/state VECTORS_DIR := $(EFTEST_DIR)/vectors TMP_DIR := tmp TESTS_REPO := $(TMP_DIR)/ethereum-tests @@ -59,22 +59,22 @@ clean-evm-ef-tests: ## ๐Ÿ—‘๏ธ Clean test vectors and temporary files run-evm-ef-tests: ## ๐Ÿƒโ€โ™‚๏ธ Run EF Tests if [ "$(QUIET)" = "true" ]; then \ cd ../../../ && \ - time cargo test --quiet -p ef_tests-levm --test ef_tests_levm --release -- $(flags) --summary;\ + time cargo test --quiet -p ef_tests-state --test all --release -- $(flags) --summary;\ elif [ "$(DEBUG)" = "true" ]; then \ cd ../../../ && \ - time cargo test -p ef_tests-levm --test ef_tests_levm -- $(flags);\ + time cargo test -p ef_tests-state --test all -- $(flags);\ else \ cd ../../../ && \ - time cargo test -p ef_tests-levm --test ef_tests_levm --release -- $(flags);\ + time cargo test -p ef_tests-state --test all --release -- $(flags);\ fi run-evm-ef-tests-ci: ## ๐Ÿƒโ€โ™‚๏ธ Run EF Tests only with LEVM and without spinner, for CI. cd ../../../ && \ - time cargo test -p ef_tests-levm --test ef_tests_levm --release -- --summary + time cargo test -p ef_tests-state --test all --release -- --summary generate-evm-ef-tests-report: ## ๐Ÿ“Š Generate EF Tests Report cd ../../../ && \ - cargo test -p ef_tests-levm --test ef_tests_levm --release -- --summary + cargo test -p ef_tests-state --test all --release -- --summary ###### Benchmarks ###### REPETITIONS := 10000 @@ -169,7 +169,7 @@ SUBDIRS := $(shell find $(VECTORS_DIR)/GeneralStateTests -maxdepth 1 -type d ! - flamegraph-run-ef-tests: ## ๐Ÿ”ฅ Run EF tests and create a flamegraph per test folder cd $(EFTEST_DIR) &&\ - mkdir -p levm_perfgraphs/flamegraph/ef_tests/levm ||: && \ + mkdir -p levm_perfgraphs/flamegraph/ef_tests/state ||: && \ mkdir -p levm_perfgraphs/flamegraph/ef_tests/revm ||: $(MAKE) flamegraph-run-ef-tests-revm $(MAKE) flamegraph-run-ef-tests-levm @@ -178,18 +178,18 @@ flamegraph-run-ef-tests-revm: @for dir in $(SUBDIRS); do\ CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root \ --output $(EFTEST_DIR)/levm_perfgraphs/flamegraph/ef_tests/revm/$$dir.svg\ - -p ef_tests-levm --test ef_tests_levm -- --summary --revm --tests $$dir;\ + -p ef_tests-state --test all -- --summary --revm --tests $$dir;\ done flamegraph-run-ef-tests-levm: @for dir in $(SUBDIRS); do\ CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root \ - --output $(EFTEST_DIR)/levm_perfgraphs/flamegraph/ef_tests/levm/$$dir.svg\ - -p ef_tests-levm --test ef_tests_levm -- --summary --tests $$dir;\ + --output $(EFTEST_DIR)/levm_perfgraphs/flamegraph/ef_tests/state/$$dir.svg\ + -p ef_tests-state --test all -- --summary --tests $$dir;\ done samply-run-ef-tests: ## โšก๏ธ Run EF tests and create a samply profiling file per test folder cd $(EFTEST_DIR) && \ - mkdir -p levm_perfgraphs/samply/ef_tests/levm ||: && \ + mkdir -p levm_perfgraphs/samply/ef_tests/state ||: && \ mkdir -p levm_perfgraphs/samply/ef_tests/revm ||: $(MAKE) samply-run-ef-tests-revm $(MAKE) samply-run-ef-tests-levm @@ -198,14 +198,14 @@ samply-run-ef-tests-revm: @for dir in $(SUBDIRS); do\ CARGO_PROFILE_RELEASE_DEBUG=true samply record --save-only \ -o $(EFTEST_DIR)/levm_perfgraphs/samply/ef_tests/revm/prof_$$dir.json \ - cargo test --release -p ef_tests-levm --test ef_tests_levm -- --summary --revm --tests $$dir;\ + cargo test --release -p ef_tests-state --test all -- --summary --revm --tests $$dir;\ done samply-run-ef-tests-levm: @for dir in $(SUBDIRS); do\ CARGO_PROFILE_RELEASE_DEBUG=true samply record --save-only \ - -o $(EFTEST_DIR)/levm_perfgraphs/samply/ef_tests/levm/prof_$$dir.json \ - cargo test --release -p ef_tests-levm --test ef_tests_levm -- --summary --tests $$dir;\ + -o $(EFTEST_DIR)/levm_perfgraphs/samply/ef_tests/state/prof_$$dir.json \ + cargo test --release -p ef_tests-state --test all -- --summary --tests $$dir;\ done ################ @@ -235,7 +235,7 @@ endef FLAMEGRAPH_DIR := $(EFTEST_DIR)/levm_perfgraphs/flamegraph/bench flamegraph-benchmarks: ## ๐Ÿ”ฅ Run benchmarks and create flamegraph - cd ../../../cmd/ef_tests/levm &&\ + cd ../../../cmd/ef_tests/state &&\ mkdir -p levm_perfgraphs/flamegraph/bench ||: $(call run_flamegraph,Fibonacci,REPETITIONS,BENCH_FIB_ITERATIONS) $(call run_flamegraph,Factorial,REPETITIONS,BENCH_FACT_ITERATIONS) @@ -246,9 +246,9 @@ flamegraph-benchmarks: ## ๐Ÿ”ฅ Run benchmarks and create flamegraph $(call run_flamegraph,ERC20Transfer,REPETITIONS_SLOW,BENCH_TRANSFER_ITERATIONS) $(call run_flamegraph,ERC20Mint,REPETITIONS_SLOW,BENCH_MINT_ITERATIONS) -SAMPLY_DIR := ../../../cmd/ef_tests/levm/levm_perfgraphs/samply/bench +SAMPLY_DIR := ../../../cmd/ef_tests/state/levm_perfgraphs/samply/bench samply-benchmarks: ## โšก๏ธ Run benchmarks and create samply profiling file - cd ../../../cmd/ef_tests/levm &&\ + cd ../../../cmd/ef_tests/state &&\ mkdir -p levm_perfgraphs/samply/bench ||: $(call run_samply,Fibonacci,REPETITIONS,BENCH_FIB_ITERATIONS) $(call run_samply,Factorial,REPETITIONS,BENCH_FACT_ITERATIONS) diff --git a/crates/vm/levm/README.md b/crates/vm/levm/README.md index 94e6300170..30276d6fe0 100644 --- a/crates/vm/levm/README.md +++ b/crates/vm/levm/README.md @@ -219,10 +219,10 @@ make run-hive-debug-levm ## Useful Links -[Ethereum Yellowpaper](https://ethereum.github.io/yellowpaper/paper.pdf) - Formal definition of Ethereum protocol. -[The EVM Handbook](https://noxx3xxon.notion.site/The-EVM-Handbook-bb38e175cc404111a391907c4975426d) - General EVM Resources -[EVM Codes](https://www.evm.codes/) - Reference for opcode implementation -[EVM Playground](https://www.evm.codes/playground) - Useful for seeing opcodes in action +[Ethereum Yellowpaper](https://ethereum.github.io/yellowpaper/paper.pdf) - Formal definition of Ethereum protocol. +[The EVM Handbook](https://noxx3xxon.notion.site/The-EVM-Handbook-bb38e175cc404111a391907c4975426d) - General EVM Resources +[EVM Codes](https://www.evm.codes/) - Reference for opcode implementation +[EVM Playground](https://www.evm.codes/playground) - Useful for seeing opcodes in action [EVM Deep Dives](https://noxx.substack.com/p/evm-deep-dives-the-path-to-shadowy) - Deep Dive into different aspects of the EVM ## Performance metrics @@ -241,7 +241,7 @@ Run the tests make flamegraph-run-ef-tests ``` -This will create a folder inside `cmd/ef_tests/levm/` named `levm_ef_test_perfgraphs` you can find the flamegraphs inside the folder `levm_ef_test_perfgraphs/flamegraph` open them with your preferred browser. +This will create a folder inside `cmd/ef_tests/state/` named `levm_ef_test_perfgraphs` you can find the flamegraphs inside the folder `levm_ef_test_perfgraphs/flamegraph` open them with your preferred browser. ### To run Samply on the Ethereum Foundation tests @@ -257,7 +257,7 @@ Run the tests make samply-run-ef-tests ``` -This will create a folder inside `cmd/ef_tests/levm/` named `levm_ef_test_perfgraphs` you can find the flamegraphs inside the folder `levm_ef_test_perfgraphs/samply` run +This will create a folder inside `cmd/ef_tests/state/` named `levm_ef_test_perfgraphs` you can find the flamegraphs inside the folder `levm_ef_test_perfgraphs/samply` run ```Shell samply load