Artifacts & Data from EtherVal

References

This website contains data artifacts for the following paper:

Seongho Jeong, Yeonsoo Kim, Xiaowen Hu, Junhao Zhu, Bernd Burgstaller, Bernhard Scholz.
EtherVal: Smart Contract Decompiler Validation for the Ethereum Blockchain. (Under review.)

EtherVal Implementation

Visit the verovm/EtherVal GitHub repository for the EtherVal source code.

TX State & EVM Trace DBs

Each etherval_db instance is a Goleveldb instance with both transaction states and EVM traces of a given block range. (E.g. 1-2M for block #1,000,001 to #2,000,000.)

Transaction states were collected using the geth record-substate command. EVM traces were collected by running the substate-cli record-trace command on the state database.

Provide the path of the EtherVal DB instance extracted from the .tar.zst file to --substate-db option of commands for validation.

SHA512 checksums: etherval_db.sha512sum

EVM bytecode & TAC of deployed contracts

EVM bytecode of deployed contracts was collected from TX state DBs using substate-cli db-dump-code command. TAC was collected by running the open-source gigahorse-toolchain with its clients/visualizeout.py with EVM bytecode. Each file is named after the MD5 hash of raw EVM bytecode.

Provide the path of the directory containing decompiled code (.sbt for high-level substrate, .tac for TAC) to --substratedir option of commands for validation.

SHA512 checksums: etherval_contract.sha512sum

Dates & commit hashes of gigahorse-toolchain:

Validation Results

EtherVal writes validation results in CSV files. For time and space efficiency, the authors converted CSV files to DuckDB files as described in the DuckDB docs (link).

The authors skipped aggregate transactions with more than 5,000 internal transactions to filter out transactions used for DoS attacks. (Command line options: --slow-tx-calls=5000 --skip-slow-txs=true)

TAC

Categories of result column of validate-tac output:

Categories of dev-tac output:

SHA512 checksums: etherval_tac_result.sha512sum

Executability Test Set, RQ1.1: Executability

validate-tac command line options:

substate-cli validate-tac --skip-transfer-txs --skip-create-txs --tac-timeout=0 --iso-emi=true --tac-max-inst-count=0 --tac-gas-inst-count=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=true
Full Δ

Default flags in source code

Result: validate-tac-executability-enable-all-2026-05.duckdb (4.7 GiB)

Gas-only Δ
  1. Modify the following flags in core/vm/tac_interpreter.go:
TACUseGasTrace  = false
TACPhiPolicy    = TACPhiPolicy_DenyAll
TACDenyAmbiJump = true
  1. Modify the following flags in tac_parser/transformer.go:
EnablePatch_ParameterName = false
EnablePatch_Reorder       = false
EnablePatch_Fallthrough   = false
EnablePatch_PHI           = false
EnablePatch_AmbiguousJump = false

Result: validate-tac-executability-disable-all-2026-05.duckdb (2.9 GiB)

Ablation Study

Modify each flag in core/vm/tac_interpreter.go to disable each dynamic patch:

  1. PHI var. timestamp: TACPhiPolicy = TACPhiPolicy_DenyAll
  2. Gas-value injection: TACUseGasTrace = false
  3. Jump disambiguation: TACDenyAmbiJump = false

Results:

  1. PHI var. timestamp: validate-tac-executability-phi-deny-all.duckdb (3.3 GiB)
  2. Gas-value injection: validate-tac-executability-disable-gas-trace-missing-sem.duckdb (4.3 GiB)
  3. Jump disambiguation: validate-tac-executability-disable-ambi-jump-deny-exec.duckdb (4.2 GiB)

Full Mainnet Set, RQ2: Semantic Equivalence of Decompiled Substrate and Bytecode

substate-cli validate-tac --skip-transfer-txs --skip-create-txs --tac-timeout=0 --iso-emi=true --tac-max-inst-count=0 --tac-gas-inst-count=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=false

Result: validate-tac-0-20M-overwrite-oog-sha3.duckdb (156.1 GiB)

Full Mainnet Set, RQ4.2: Trace-Based Deviation Detection

substate-cli dev-tac --skip-transfer-txs --skip-create-txs --tac-timeout=0 --iso-emi=true --tac-max-inst-count=0 --tac-gas-inst-count=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=true

Result: deviation-tac-iso-ext-2026-05.duckdb (22.0 GiB)

Decompiler Evolution Set, RQ4.1: Continuous Validation of Decompiler Evolution

substate-cli validate-tac --skip-transfer-txs --skip-create-txs --tac-timeout=0 --iso-emi=true --tac-max-inst-count=0 --tac-gas-inst-count=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=true

Modify TACNotFoundEmptyResult flag to false in core/vm/tac_interpreter.go

Results:

High-level substrate

Categories based on the result and errmsg columns in validate-sbt output:

For transactions with result IS NULL, the error category is determined from the error message in the errmsg column.

Categories of dev-sbt output:

SHA512 checksums: etherval_sbt_result.sha512sum

Executability Test Set, RQ1.1: Executability

validate-sbt command line options:

substate-cli validate-sbt --skip-transfer-txs --skip-create-txs --iso-emi=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=true

Result: validate-sbt-executability.duckdb (12.9 GiB)

Each validation configuration is stored in a separate table.

Full Δ

Default flags in source code.

Result: useDelta_enableAll table

Ablation Study

Modify each flag in core/vm/substrate_interpreter.go to disable each dynamic patch:

  1. Event-log injection: useDeltaLOG = false
  2. Type propagation: useDeltaProp = false
  3. FMP inference: useDeltaFMP = false

Results:

  1. Event-log injection: useDelta_offLOG table
  2. Type propagation: useDelta_offProp table
  3. FMP inference: useDelta_offFMP table

Full Mainnet Set, RQ2: Semantic Equivalence of Decompiled Substrate and Bytecode

substate-cli validate-sbt --skip-transfer-txs --skip-create-txs --iso-emi=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=false

Result: validate-sbt-0-20M.duckdb (367.0 GiB)

Full Mainnet Set, RQ4.2: Trace-Based Deviation Detection

substate-cli dev-sbt --skip-transfer-txs --skip-create-txs --iso-emi=true --slow-tx-calls=5000 --skip-slow-txs=true --skip-internal-txs=true

Result: validate-sbt-deviation.duckdb (37.4 GiB)

Contact

Please email Prof. Bernd Burgstaller at bburg@yonsei.ac.kr and include [EtherVal] in the subject line.