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.)
Visit the verovm/EtherVal GitHub repository for the EtherVal source code.
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 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:
1f6de5a92b5ef47d0f0b4cab6f4ff1e717aaad7db99222dc7d6806bd5b216697cafe8fc0c45e57b6622fbd9e0662894a52a9e3793181f879cced3dd982fd3faa59bec66629161b9f9038ef1294966d6bEtherVal 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)
Categories of result column of validate-tac output:
PASSEDFAILEDTACParseError, NoTacTxTACTimeoutCategories of dev-tac output:
NOT deviated AND result = 'PASSED'deviated AND result = 'PASSED'(deviated AND result = 'FAILED') OR (deviated AND result = 'TACPanic' AND deviationPoint NOT LIKE 'Deviated by remaining %')NOT deviated AND result = 'FAILED'SHA512 checksums: etherval_tac_result.sha512sum
validate-tac command line options:
Default flags in source code
Result: validate-tac-executability-enable-all-2026-05.duckdb (4.7 GiB)
core/vm/tac_interpreter.go:tac_parser/transformer.go:EnablePatch_ParameterName = false
EnablePatch_Reorder = false
EnablePatch_Fallthrough = false
EnablePatch_PHI = false
EnablePatch_AmbiguousJump = falseResult: validate-tac-executability-disable-all-2026-05.duckdb (2.9 GiB)
Modify each flag in core/vm/tac_interpreter.go to disable each dynamic patch:
TACPhiPolicy = TACPhiPolicy_DenyAllTACUseGasTrace = falseTACDenyAmbiJump = falseResults:
Result: validate-tac-0-20M-overwrite-oog-sha3.duckdb (156.1 GiB)
Result: deviation-tac-iso-ext-2026-05.duckdb (22.0 GiB)
Modify TACNotFoundEmptyResult flag to false in core/vm/tac_interpreter.go
Results:
Categories based on the result and errmsg columns in validate-sbt output:
result = 'OK'result IS NULL AND errmsg IS NULLresult IS NULL AND errmsg = <decompilation error>result IS NULL AND errmsg = <non-termination error>result IS NULL AND errmsg = <runtime error>For transactions with result IS NULL, the error category is determined from the error message in the errmsg column.
Categories of dev-sbt output:
result = 'OK' AND errmsg NOT LIKE 'Deviated %'result = 'OK' AND errmsg LIKE 'Deviated %'result IS NULL AND errmsg LIKE 'Deviated %'result IS NULL AND errmsg NOT LIKE 'Deviated %'SHA512 checksums: etherval_sbt_result.sha512sum
validate-sbt command line options:
Result: validate-sbt-executability.duckdb (12.9 GiB)
Each validation configuration is stored in a separate table.
Default flags in source code.
Result: useDelta_enableAll table
Modify each flag in core/vm/substrate_interpreter.go to disable each dynamic patch:
useDeltaLOG = falseuseDeltaProp = falseuseDeltaFMP = falseResults:
useDelta_offLOG tableuseDelta_offProp tableuseDelta_offFMP tableResult: validate-sbt-0-20M.duckdb (367.0 GiB)
Result: validate-sbt-deviation.duckdb (37.4 GiB)
Please email Prof. Bernd Burgstaller at bburg@yonsei.ac.kr and include [EtherVal] in the subject line.