Repository: ConsenSys/mythril-classic Branch: develop Commit: 125914a6eae8 Files: 989 Total size: 3.1 MB Directory structure: gitextract_g8fg3qrk/ ├── .circleci/ │ └── config.yml ├── .dockerignore ├── .drone.yml ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── analysis-module.md │ │ ├── bug-report.md │ │ └── feature-request.md │ ├── dependabot.yml │ └── workflows/ │ ├── container.yml │ ├── pre-commit-hooks-test.yml │ └── pre-commit.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .pre-commit-hooks.yaml ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── MANIFEST.in ├── README.md ├── all_tests.sh ├── coverage_report.sh ├── docker/ │ ├── docker-entrypoint.sh │ └── sync-svm-solc-versions-with-solcx.sh ├── docker-bake.hcl ├── docker_build_and_deploy.sh ├── docs/ │ ├── Makefile │ ├── make.bat │ └── source/ │ ├── about.rst │ ├── analysis-modules.rst │ ├── conf.py │ ├── create-module.rst │ ├── index.rst │ ├── installation.rst │ ├── module-list.rst │ ├── modules.rst │ ├── mythril.analysis.module.modules.rst │ ├── mythril.analysis.module.rst │ ├── mythril.analysis.rst │ ├── mythril.concolic.rst │ ├── mythril.disassembler.rst │ ├── mythril.ethereum.interface.rpc.rst │ ├── mythril.ethereum.interface.rst │ ├── mythril.ethereum.rst │ ├── mythril.interfaces.rst │ ├── mythril.laser.ethereum.function_managers.rst │ ├── mythril.laser.ethereum.rst │ ├── mythril.laser.ethereum.state.rst │ ├── mythril.laser.ethereum.strategy.extensions.rst │ ├── mythril.laser.ethereum.strategy.rst │ ├── mythril.laser.ethereum.transaction.rst │ ├── mythril.laser.plugin.plugins.coverage.rst │ ├── mythril.laser.plugin.plugins.rst │ ├── mythril.laser.plugin.plugins.summary_backup.rst │ ├── mythril.laser.plugin.rst │ ├── mythril.laser.rst │ ├── mythril.laser.smt.rst │ ├── mythril.laser.smt.solver.rst │ ├── mythril.mythril.rst │ ├── mythril.plugin.rst │ ├── mythril.rst │ ├── mythril.solidity.rst │ ├── mythril.support.rst │ ├── security-analysis.rst │ └── tutorial.rst ├── mypy-stubs/ │ └── z3/ │ ├── __init__.pyi │ ├── z3core.pyi │ └── z3types.pyi ├── myth ├── mythril/ │ ├── __init__.py │ ├── __main__.py │ ├── __version__.py │ ├── analysis/ │ │ ├── __init__.py │ │ ├── analysis_args.py │ │ ├── call_helpers.py │ │ ├── callgraph.py │ │ ├── issue_annotation.py │ │ ├── module/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── loader.py │ │ │ ├── module_helpers.py │ │ │ ├── modules/ │ │ │ │ ├── __init__.py │ │ │ │ ├── arbitrary_jump.py │ │ │ │ ├── arbitrary_write.py │ │ │ │ ├── delegatecall.py │ │ │ │ ├── dependence_on_origin.py │ │ │ │ ├── dependence_on_predictable_vars.py │ │ │ │ ├── ether_thief.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── external_calls.py │ │ │ │ ├── integer.py │ │ │ │ ├── multiple_sends.py │ │ │ │ ├── requirements_violation.py │ │ │ │ ├── state_change_external_calls.py │ │ │ │ ├── suicide.py │ │ │ │ ├── transaction_order_dependence.py │ │ │ │ ├── unchecked_retval.py │ │ │ │ ├── unexpected_ether.py │ │ │ │ └── user_assertions.py │ │ │ └── util.py │ │ ├── ops.py │ │ ├── potential_issues.py │ │ ├── report.py │ │ ├── security.py │ │ ├── solver.py │ │ ├── swc_data.py │ │ ├── symbolic.py │ │ ├── templates/ │ │ │ ├── callgraph.html │ │ │ ├── report_as_markdown.jinja2 │ │ │ └── report_as_text.jinja2 │ │ └── traceexplore.py │ ├── concolic/ │ │ ├── __init__.py │ │ ├── concolic_execution.py │ │ ├── concrete_data.py │ │ └── find_trace.py │ ├── config.ini │ ├── disassembler/ │ │ ├── __init__.py │ │ ├── asm.py │ │ └── disassembly.py │ ├── ethereum/ │ │ ├── __init__.py │ │ ├── evmcontract.py │ │ ├── interface/ │ │ │ ├── __init__.py │ │ │ └── rpc/ │ │ │ ├── __init__.py │ │ │ ├── base_client.py │ │ │ ├── client.py │ │ │ ├── constants.py │ │ │ ├── exceptions.py │ │ │ └── utils.py │ │ └── util.py │ ├── exceptions.py │ ├── interfaces/ │ │ ├── __init__.py │ │ ├── cli.py │ │ └── epic.py │ ├── laser/ │ │ ├── __init__.py │ │ ├── ethereum/ │ │ │ ├── __init__.py │ │ │ ├── call.py │ │ │ ├── cfg.py │ │ │ ├── cheat_code.py │ │ │ ├── evm_exceptions.py │ │ │ ├── function_managers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exponent_function_manager.py │ │ │ │ └── keccak_function_manager.py │ │ │ ├── instruction_data.py │ │ │ ├── instructions.py │ │ │ ├── natives.py │ │ │ ├── state/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account.py │ │ │ │ ├── annotation.py │ │ │ │ ├── calldata.py │ │ │ │ ├── constraints.py │ │ │ │ ├── environment.py │ │ │ │ ├── global_state.py │ │ │ │ ├── machine_state.py │ │ │ │ ├── memory.py │ │ │ │ ├── return_data.py │ │ │ │ ├── transient_storage.py │ │ │ │ └── world_state.py │ │ │ ├── strategy/ │ │ │ │ ├── __init__.py │ │ │ │ ├── basic.py │ │ │ │ ├── beam.py │ │ │ │ ├── concolic.py │ │ │ │ ├── constraint_strategy.py │ │ │ │ └── extensions/ │ │ │ │ ├── __init__.py │ │ │ │ └── bounded_loops.py │ │ │ ├── svm.py │ │ │ ├── time_handler.py │ │ │ ├── transaction/ │ │ │ │ ├── __init__.py │ │ │ │ ├── concolic.py │ │ │ │ ├── symbolic.py │ │ │ │ └── transaction_models.py │ │ │ ├── tx_prioritiser/ │ │ │ │ ├── __init__.py │ │ │ │ └── rf_prioritiser.py │ │ │ └── util.py │ │ ├── execution_info.py │ │ ├── plugin/ │ │ │ ├── __init__.py │ │ │ ├── builder.py │ │ │ ├── interface.py │ │ │ ├── loader.py │ │ │ ├── plugins/ │ │ │ │ ├── __init__.py │ │ │ │ ├── benchmark.py │ │ │ │ ├── call_depth_limiter.py │ │ │ │ ├── coverage/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── coverage_plugin.py │ │ │ │ │ └── coverage_strategy.py │ │ │ │ ├── coverage_metrics/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── constants.py │ │ │ │ │ ├── coverage_data.py │ │ │ │ │ └── metrics_plugin.py │ │ │ │ ├── dependency_pruner.py │ │ │ │ ├── instruction_profiler.py │ │ │ │ ├── mutation_pruner.py │ │ │ │ ├── plugin_annotations.py │ │ │ │ ├── state_merge/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── check_mergeability.py │ │ │ │ │ ├── merge_states.py │ │ │ │ │ └── state_merge_plugin.py │ │ │ │ ├── summary/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── annotations.py │ │ │ │ │ ├── core.py │ │ │ │ │ └── summary.py │ │ │ │ ├── summary_backup/ │ │ │ │ │ └── __init__.py │ │ │ │ └── trace.py │ │ │ └── signals.py │ │ └── smt/ │ │ ├── __init__.py │ │ ├── array.py │ │ ├── bitvec.py │ │ ├── bitvec_helper.py │ │ ├── bool.py │ │ ├── expression.py │ │ ├── function.py │ │ ├── model.py │ │ └── solver/ │ │ ├── __init__.py │ │ ├── independence_solver.py │ │ ├── solver.py │ │ └── solver_statistics.py │ ├── mythril/ │ │ ├── __init__.py │ │ ├── mythril_analyzer.py │ │ ├── mythril_config.py │ │ └── mythril_disassembler.py │ ├── plugin/ │ │ ├── __init__.py │ │ ├── discovery.py │ │ ├── interface.py │ │ └── loader.py │ ├── solidity/ │ │ ├── __init__.py │ │ ├── features.py │ │ └── soliditycontract.py │ └── support/ │ ├── __init__.py │ ├── loader.py │ ├── lock.py │ ├── model.py │ ├── opcodes.py │ ├── signatures.py │ ├── source_support.py │ ├── start_time.py │ ├── support_args.py │ └── support_utils.py ├── pyproject.toml ├── requirements.txt ├── setup.py ├── solidity_examples/ │ ├── BECToken.sol │ ├── WalletLibrary.sol │ ├── calls.sol │ ├── etherstore.sol │ ├── exceptions.sol │ ├── hashforether.sol │ ├── killbilly.sol │ ├── origin.sol │ ├── returnvalue.sol │ ├── rubixi.sol │ ├── suicide.sol │ ├── timelock.sol │ ├── token.sol │ └── weak_random.sol ├── static/ │ ├── Ownable.html │ ├── assertions.html │ ├── mythril.html │ └── sample_report.md ├── tests/ │ ├── __init__.py │ ├── analysis/ │ │ ├── abi_decode_test.py │ │ └── arbitrary_jump_test.py │ ├── cli_tests/ │ │ └── cli_opts_test.py │ ├── cmd_line_test.py │ ├── concolic/ │ │ └── concolic_tests.py │ ├── disassembler/ │ │ ├── __init__.py │ │ ├── asm_test.py │ │ └── disassembly_test.py │ ├── disassembler_test.py │ ├── evmcontract_test.py │ ├── features_test.py │ ├── graph_test.py │ ├── instructions/ │ │ ├── __init__.py │ │ ├── basefee_test.py │ │ ├── codecopy_test.py │ │ ├── create2_test.py │ │ ├── create_test.py │ │ ├── extcodecopy_test.py │ │ ├── extcodehash_test.py │ │ ├── push_test.py │ │ ├── sar_test.py │ │ ├── shl_test.py │ │ ├── shr_test.py │ │ └── static_call_test.py │ ├── integration_tests/ │ │ ├── analysis_tests.py │ │ ├── coverage_metrics_test.py │ │ ├── old_version_test.py │ │ ├── safe_functions_test.py │ │ ├── solc_settings_test.py │ │ ├── src_mapping_test.py │ │ ├── state_merge_tests.py │ │ ├── summary_test.py │ │ ├── transient_storage_test.py │ │ ├── utils.py │ │ └── version_test.py │ ├── laser/ │ │ ├── Precompiles/ │ │ │ ├── blake2_test.py │ │ │ ├── ec_add_test.py │ │ │ ├── ecrecover_test.py │ │ │ ├── elliptic_curves_test.py │ │ │ ├── elliptic_mul_test.py │ │ │ ├── identity_test.py │ │ │ ├── mod_exp_test.py │ │ │ ├── ripemd_test.py │ │ │ └── sha256_test.py │ │ ├── __init__.py │ │ ├── evm_testsuite/ │ │ │ ├── VMTests/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── vmArithmeticTest/ │ │ │ │ │ ├── add0.json │ │ │ │ │ ├── add1.json │ │ │ │ │ ├── add2.json │ │ │ │ │ ├── add3.json │ │ │ │ │ ├── add4.json │ │ │ │ │ ├── addmod0.json │ │ │ │ │ ├── addmod1.json │ │ │ │ │ ├── addmod1_overflow2.json │ │ │ │ │ ├── addmod1_overflow3.json │ │ │ │ │ ├── addmod1_overflow4.json │ │ │ │ │ ├── addmod1_overflowDiff.json │ │ │ │ │ ├── addmod2.json │ │ │ │ │ ├── addmod2_0.json │ │ │ │ │ ├── addmod2_1.json │ │ │ │ │ ├── addmod3.json │ │ │ │ │ ├── addmod3_0.json │ │ │ │ │ ├── addmodBigIntCast.json │ │ │ │ │ ├── addmodDivByZero.json │ │ │ │ │ ├── addmodDivByZero1.json │ │ │ │ │ ├── addmodDivByZero2.json │ │ │ │ │ ├── addmodDivByZero3.json │ │ │ │ │ ├── arith1.json │ │ │ │ │ ├── div1.json │ │ │ │ │ ├── divBoostBug.json │ │ │ │ │ ├── divByNonZero0.json │ │ │ │ │ ├── divByNonZero1.json │ │ │ │ │ ├── divByNonZero2.json │ │ │ │ │ ├── divByNonZero3.json │ │ │ │ │ ├── divByZero.json │ │ │ │ │ ├── divByZero_2.json │ │ │ │ │ ├── exp0.json │ │ │ │ │ ├── exp1.json │ │ │ │ │ ├── exp2.json │ │ │ │ │ ├── exp3.json │ │ │ │ │ ├── exp4.json │ │ │ │ │ ├── exp5.json │ │ │ │ │ ├── exp6.json │ │ │ │ │ ├── exp7.json │ │ │ │ │ ├── exp8.json │ │ │ │ │ ├── expPowerOf256Of256_0.json │ │ │ │ │ ├── expPowerOf256Of256_1.json │ │ │ │ │ ├── expPowerOf256Of256_10.json │ │ │ │ │ ├── expPowerOf256Of256_11.json │ │ │ │ │ ├── expPowerOf256Of256_12.json │ │ │ │ │ ├── expPowerOf256Of256_13.json │ │ │ │ │ ├── expPowerOf256Of256_14.json │ │ │ │ │ ├── expPowerOf256Of256_15.json │ │ │ │ │ ├── expPowerOf256Of256_16.json │ │ │ │ │ ├── expPowerOf256Of256_17.json │ │ │ │ │ ├── expPowerOf256Of256_18.json │ │ │ │ │ ├── expPowerOf256Of256_19.json │ │ │ │ │ ├── expPowerOf256Of256_2.json │ │ │ │ │ ├── expPowerOf256Of256_20.json │ │ │ │ │ ├── expPowerOf256Of256_21.json │ │ │ │ │ ├── expPowerOf256Of256_22.json │ │ │ │ │ ├── expPowerOf256Of256_23.json │ │ │ │ │ ├── expPowerOf256Of256_24.json │ │ │ │ │ ├── expPowerOf256Of256_25.json │ │ │ │ │ ├── expPowerOf256Of256_26.json │ │ │ │ │ ├── expPowerOf256Of256_27.json │ │ │ │ │ ├── expPowerOf256Of256_28.json │ │ │ │ │ ├── expPowerOf256Of256_29.json │ │ │ │ │ ├── expPowerOf256Of256_3.json │ │ │ │ │ ├── expPowerOf256Of256_30.json │ │ │ │ │ ├── expPowerOf256Of256_31.json │ │ │ │ │ ├── expPowerOf256Of256_32.json │ │ │ │ │ ├── expPowerOf256Of256_33.json │ │ │ │ │ ├── expPowerOf256Of256_4.json │ │ │ │ │ ├── expPowerOf256Of256_5.json │ │ │ │ │ ├── expPowerOf256Of256_6.json │ │ │ │ │ ├── expPowerOf256Of256_7.json │ │ │ │ │ ├── expPowerOf256Of256_8.json │ │ │ │ │ ├── expPowerOf256Of256_9.json │ │ │ │ │ ├── expPowerOf256_1.json │ │ │ │ │ ├── expPowerOf256_10.json │ │ │ │ │ ├── expPowerOf256_11.json │ │ │ │ │ ├── expPowerOf256_12.json │ │ │ │ │ ├── expPowerOf256_13.json │ │ │ │ │ ├── expPowerOf256_14.json │ │ │ │ │ ├── expPowerOf256_15.json │ │ │ │ │ ├── expPowerOf256_16.json │ │ │ │ │ ├── expPowerOf256_17.json │ │ │ │ │ ├── expPowerOf256_18.json │ │ │ │ │ ├── expPowerOf256_19.json │ │ │ │ │ ├── expPowerOf256_2.json │ │ │ │ │ ├── expPowerOf256_20.json │ │ │ │ │ ├── expPowerOf256_21.json │ │ │ │ │ ├── expPowerOf256_22.json │ │ │ │ │ ├── expPowerOf256_23.json │ │ │ │ │ ├── expPowerOf256_24.json │ │ │ │ │ ├── expPowerOf256_25.json │ │ │ │ │ ├── expPowerOf256_26.json │ │ │ │ │ ├── expPowerOf256_27.json │ │ │ │ │ ├── expPowerOf256_28.json │ │ │ │ │ ├── expPowerOf256_29.json │ │ │ │ │ ├── expPowerOf256_3.json │ │ │ │ │ ├── expPowerOf256_30.json │ │ │ │ │ ├── expPowerOf256_31.json │ │ │ │ │ ├── expPowerOf256_32.json │ │ │ │ │ ├── expPowerOf256_33.json │ │ │ │ │ ├── expPowerOf256_4.json │ │ │ │ │ ├── expPowerOf256_5.json │ │ │ │ │ ├── expPowerOf256_6.json │ │ │ │ │ ├── expPowerOf256_7.json │ │ │ │ │ ├── expPowerOf256_8.json │ │ │ │ │ ├── expPowerOf256_9.json │ │ │ │ │ ├── expPowerOf2_128.json │ │ │ │ │ ├── expPowerOf2_16.json │ │ │ │ │ ├── expPowerOf2_2.json │ │ │ │ │ ├── expPowerOf2_256.json │ │ │ │ │ ├── expPowerOf2_32.json │ │ │ │ │ ├── expPowerOf2_4.json │ │ │ │ │ ├── expPowerOf2_64.json │ │ │ │ │ ├── expPowerOf2_8.json │ │ │ │ │ ├── expXY.json │ │ │ │ │ ├── expXY_success.json │ │ │ │ │ ├── fibbonacci_unrolled.json │ │ │ │ │ ├── mod0.json │ │ │ │ │ ├── mod1.json │ │ │ │ │ ├── mod2.json │ │ │ │ │ ├── mod3.json │ │ │ │ │ ├── mod4.json │ │ │ │ │ ├── modByZero.json │ │ │ │ │ ├── mul0.json │ │ │ │ │ ├── mul1.json │ │ │ │ │ ├── mul2.json │ │ │ │ │ ├── mul3.json │ │ │ │ │ ├── mul4.json │ │ │ │ │ ├── mul5.json │ │ │ │ │ ├── mul6.json │ │ │ │ │ ├── mul7.json │ │ │ │ │ ├── mulmod0.json │ │ │ │ │ ├── mulmod1.json │ │ │ │ │ ├── mulmod1_overflow.json │ │ │ │ │ ├── mulmod1_overflow2.json │ │ │ │ │ ├── mulmod1_overflow3.json │ │ │ │ │ ├── mulmod1_overflow4.json │ │ │ │ │ ├── mulmod2.json │ │ │ │ │ ├── mulmod2_0.json │ │ │ │ │ ├── mulmod2_1.json │ │ │ │ │ ├── mulmod3.json │ │ │ │ │ ├── mulmod3_0.json │ │ │ │ │ ├── mulmod4.json │ │ │ │ │ ├── mulmoddivByZero.json │ │ │ │ │ ├── mulmoddivByZero1.json │ │ │ │ │ ├── mulmoddivByZero2.json │ │ │ │ │ ├── mulmoddivByZero3.json │ │ │ │ │ ├── not1.json │ │ │ │ │ ├── sdiv0.json │ │ │ │ │ ├── sdiv1.json │ │ │ │ │ ├── sdiv2.json │ │ │ │ │ ├── sdiv3.json │ │ │ │ │ ├── sdiv4.json │ │ │ │ │ ├── sdiv5.json │ │ │ │ │ ├── sdiv6.json │ │ │ │ │ ├── sdiv7.json │ │ │ │ │ ├── sdiv8.json │ │ │ │ │ ├── sdiv9.json │ │ │ │ │ ├── sdivByZero0.json │ │ │ │ │ ├── sdivByZero1.json │ │ │ │ │ ├── sdivByZero2.json │ │ │ │ │ ├── sdiv_dejavu.json │ │ │ │ │ ├── sdiv_i256min.json │ │ │ │ │ ├── sdiv_i256min2.json │ │ │ │ │ ├── sdiv_i256min3.json │ │ │ │ │ ├── signextendInvalidByteNumber.json │ │ │ │ │ ├── signextend_00.json │ │ │ │ │ ├── signextend_0_BigByte.json │ │ │ │ │ ├── signextend_AlmostBiggestByte.json │ │ │ │ │ ├── signextend_BigByteBigByte.json │ │ │ │ │ ├── signextend_BigBytePlus1_2.json │ │ │ │ │ ├── signextend_BigByte_0.json │ │ │ │ │ ├── signextend_BitIsNotSet.json │ │ │ │ │ ├── signextend_BitIsNotSetInHigherByte.json │ │ │ │ │ ├── signextend_BitIsSetInHigherByte.json │ │ │ │ │ ├── signextend_Overflow_dj42.json │ │ │ │ │ ├── signextend_bigBytePlus1.json │ │ │ │ │ ├── signextend_bitIsSet.json │ │ │ │ │ ├── smod0.json │ │ │ │ │ ├── smod1.json │ │ │ │ │ ├── smod2.json │ │ │ │ │ ├── smod3.json │ │ │ │ │ ├── smod4.json │ │ │ │ │ ├── smod5.json │ │ │ │ │ ├── smod6.json │ │ │ │ │ ├── smod7.json │ │ │ │ │ ├── smod8_byZero.json │ │ │ │ │ ├── smod_i256min1.json │ │ │ │ │ ├── smod_i256min2.json │ │ │ │ │ ├── stop.json │ │ │ │ │ ├── sub0.json │ │ │ │ │ ├── sub1.json │ │ │ │ │ ├── sub2.json │ │ │ │ │ ├── sub3.json │ │ │ │ │ └── sub4.json │ │ │ │ ├── vmBitwiseLogicOperation/ │ │ │ │ │ ├── and0.json │ │ │ │ │ ├── and1.json │ │ │ │ │ ├── and2.json │ │ │ │ │ ├── and3.json │ │ │ │ │ ├── and4.json │ │ │ │ │ ├── and5.json │ │ │ │ │ ├── byte0.json │ │ │ │ │ ├── byte1.json │ │ │ │ │ ├── byte10.json │ │ │ │ │ ├── byte11.json │ │ │ │ │ ├── byte2.json │ │ │ │ │ ├── byte3.json │ │ │ │ │ ├── byte4.json │ │ │ │ │ ├── byte5.json │ │ │ │ │ ├── byte6.json │ │ │ │ │ ├── byte7.json │ │ │ │ │ ├── byte8.json │ │ │ │ │ ├── byte9.json │ │ │ │ │ ├── eq0.json │ │ │ │ │ ├── eq1.json │ │ │ │ │ ├── eq2.json │ │ │ │ │ ├── gt0.json │ │ │ │ │ ├── gt1.json │ │ │ │ │ ├── gt2.json │ │ │ │ │ ├── gt3.json │ │ │ │ │ ├── iszeo2.json │ │ │ │ │ ├── iszero0.json │ │ │ │ │ ├── iszero1.json │ │ │ │ │ ├── lt0.json │ │ │ │ │ ├── lt1.json │ │ │ │ │ ├── lt2.json │ │ │ │ │ ├── lt3.json │ │ │ │ │ ├── not0.json │ │ │ │ │ ├── not1.json │ │ │ │ │ ├── not2.json │ │ │ │ │ ├── not3.json │ │ │ │ │ ├── not4.json │ │ │ │ │ ├── not5.json │ │ │ │ │ ├── or0.json │ │ │ │ │ ├── or1.json │ │ │ │ │ ├── or2.json │ │ │ │ │ ├── or3.json │ │ │ │ │ ├── or4.json │ │ │ │ │ ├── or5.json │ │ │ │ │ ├── sgt0.json │ │ │ │ │ ├── sgt1.json │ │ │ │ │ ├── sgt2.json │ │ │ │ │ ├── sgt3.json │ │ │ │ │ ├── sgt4.json │ │ │ │ │ ├── slt0.json │ │ │ │ │ ├── slt1.json │ │ │ │ │ ├── slt2.json │ │ │ │ │ ├── slt3.json │ │ │ │ │ ├── slt4.json │ │ │ │ │ ├── xor0.json │ │ │ │ │ ├── xor1.json │ │ │ │ │ ├── xor2.json │ │ │ │ │ ├── xor3.json │ │ │ │ │ ├── xor4.json │ │ │ │ │ └── xor5.json │ │ │ │ ├── vmEnvironmentalInfo/ │ │ │ │ │ ├── address0.json │ │ │ │ │ ├── address1.json │ │ │ │ │ ├── calldatacopy0.json │ │ │ │ │ ├── calldatacopy0_return.json │ │ │ │ │ ├── calldatacopy1.json │ │ │ │ │ ├── calldatacopy1_return.json │ │ │ │ │ ├── calldatacopy2.json │ │ │ │ │ ├── calldatacopy2_return.json │ │ │ │ │ ├── calldatacopyUnderFlowerror.json │ │ │ │ │ ├── calldatacopyZeroMemExpansion.json │ │ │ │ │ ├── calldatacopyZeroMemExpansion_return.json │ │ │ │ │ ├── calldatacopy_DataIndexTooHigh.json │ │ │ │ │ ├── calldatacopy_DataIndexTooHigh2.json │ │ │ │ │ ├── calldatacopy_DataIndexTooHigh2_return.json │ │ │ │ │ ├── calldatacopy_DataIndexTooHigh_return.json │ │ │ │ │ ├── calldatacopy_sec.json │ │ │ │ │ ├── calldataload0.json │ │ │ │ │ ├── calldataload1.json │ │ │ │ │ ├── calldataload2.json │ │ │ │ │ ├── calldataloadSizeTooHigh.json │ │ │ │ │ ├── calldataloadSizeTooHighPartial.json │ │ │ │ │ ├── calldataload_BigOffset.json │ │ │ │ │ ├── calldatasize0.json │ │ │ │ │ ├── calldatasize1.json │ │ │ │ │ ├── calldatasize2.json │ │ │ │ │ ├── caller.json │ │ │ │ │ ├── callvalue.json │ │ │ │ │ ├── codecopy0.json │ │ │ │ │ ├── codecopyZeroMemExpansion.json │ │ │ │ │ ├── codecopy_DataIndexTooHigh.json │ │ │ │ │ ├── codesize.json │ │ │ │ │ ├── gasprice.json │ │ │ │ │ └── origin.json │ │ │ │ ├── vmIOandFlowOperations/ │ │ │ │ │ ├── BlockNumberDynamicJump0_AfterJumpdest.json │ │ │ │ │ ├── BlockNumberDynamicJump0_AfterJumpdest3.json │ │ │ │ │ ├── BlockNumberDynamicJump0_foreverOutOfGas.json │ │ │ │ │ ├── BlockNumberDynamicJump0_jumpdest0.json │ │ │ │ │ ├── BlockNumberDynamicJump0_jumpdest2.json │ │ │ │ │ ├── BlockNumberDynamicJump0_withoutJumpdest.json │ │ │ │ │ ├── BlockNumberDynamicJump1.json │ │ │ │ │ ├── BlockNumberDynamicJumpInsidePushWithJumpDest.json │ │ │ │ │ ├── BlockNumberDynamicJumpInsidePushWithoutJumpDest.json │ │ │ │ │ ├── BlockNumberDynamicJumpi0.json │ │ │ │ │ ├── BlockNumberDynamicJumpi1.json │ │ │ │ │ ├── BlockNumberDynamicJumpi1_jumpdest.json │ │ │ │ │ ├── BlockNumberDynamicJumpiAfterStop.json │ │ │ │ │ ├── BlockNumberDynamicJumpiOutsideBoundary.json │ │ │ │ │ ├── BlockNumberDynamicJumpifInsidePushWithJumpDest.json │ │ │ │ │ ├── BlockNumberDynamicJumpifInsidePushWithoutJumpDest.json │ │ │ │ │ ├── DyanmicJump0_outOfBoundary.json │ │ │ │ │ ├── DynamicJump0_AfterJumpdest.json │ │ │ │ │ ├── DynamicJump0_AfterJumpdest3.json │ │ │ │ │ ├── DynamicJump0_foreverOutOfGas.json │ │ │ │ │ ├── DynamicJump0_jumpdest0.json │ │ │ │ │ ├── DynamicJump0_jumpdest2.json │ │ │ │ │ ├── DynamicJump0_withoutJumpdest.json │ │ │ │ │ ├── DynamicJump1.json │ │ │ │ │ ├── DynamicJumpAfterStop.json │ │ │ │ │ ├── DynamicJumpInsidePushWithJumpDest.json │ │ │ │ │ ├── DynamicJumpInsidePushWithoutJumpDest.json │ │ │ │ │ ├── DynamicJumpJD_DependsOnJumps0.json │ │ │ │ │ ├── DynamicJumpJD_DependsOnJumps1.json │ │ │ │ │ ├── DynamicJumpPathologicalTest0.json │ │ │ │ │ ├── DynamicJumpPathologicalTest1.json │ │ │ │ │ ├── DynamicJumpPathologicalTest2.json │ │ │ │ │ ├── DynamicJumpPathologicalTest3.json │ │ │ │ │ ├── DynamicJumpStartWithJumpDest.json │ │ │ │ │ ├── DynamicJump_value1.json │ │ │ │ │ ├── DynamicJump_value2.json │ │ │ │ │ ├── DynamicJump_value3.json │ │ │ │ │ ├── DynamicJump_valueUnderflow.json │ │ │ │ │ ├── DynamicJumpi0.json │ │ │ │ │ ├── DynamicJumpi1.json │ │ │ │ │ ├── DynamicJumpi1_jumpdest.json │ │ │ │ │ ├── DynamicJumpiAfterStop.json │ │ │ │ │ ├── DynamicJumpiOutsideBoundary.json │ │ │ │ │ ├── DynamicJumpifInsidePushWithJumpDest.json │ │ │ │ │ ├── DynamicJumpifInsidePushWithoutJumpDest.json │ │ │ │ │ ├── JDfromStorageDynamicJump0_AfterJumpdest.json │ │ │ │ │ ├── JDfromStorageDynamicJump0_AfterJumpdest3.json │ │ │ │ │ ├── JDfromStorageDynamicJump0_foreverOutOfGas.json │ │ │ │ │ ├── JDfromStorageDynamicJump0_jumpdest0.json │ │ │ │ │ ├── JDfromStorageDynamicJump0_jumpdest2.json │ │ │ │ │ ├── JDfromStorageDynamicJump0_withoutJumpdest.json │ │ │ │ │ ├── JDfromStorageDynamicJump1.json │ │ │ │ │ ├── JDfromStorageDynamicJumpInsidePushWithJumpDest.json │ │ │ │ │ ├── JDfromStorageDynamicJumpInsidePushWithoutJumpDest.json │ │ │ │ │ ├── JDfromStorageDynamicJumpi0.json │ │ │ │ │ ├── JDfromStorageDynamicJumpi1.json │ │ │ │ │ ├── JDfromStorageDynamicJumpi1_jumpdest.json │ │ │ │ │ ├── JDfromStorageDynamicJumpiAfterStop.json │ │ │ │ │ ├── JDfromStorageDynamicJumpiOutsideBoundary.json │ │ │ │ │ ├── JDfromStorageDynamicJumpifInsidePushWithJumpDest.json │ │ │ │ │ ├── JDfromStorageDynamicJumpifInsidePushWithoutJumpDest.json │ │ │ │ │ ├── bad_indirect_jump1.json │ │ │ │ │ ├── bad_indirect_jump2.json │ │ │ │ │ ├── byte1.json │ │ │ │ │ ├── calldatacopyMemExp.json │ │ │ │ │ ├── codecopyMemExp.json │ │ │ │ │ ├── deadCode_1.json │ │ │ │ │ ├── dupAt51becameMload.json │ │ │ │ │ ├── for_loop1.json │ │ │ │ │ ├── for_loop2.json │ │ │ │ │ ├── gas0.json │ │ │ │ │ ├── gas1.json │ │ │ │ │ ├── gasOverFlow.json │ │ │ │ │ ├── indirect_jump1.json │ │ │ │ │ ├── indirect_jump2.json │ │ │ │ │ ├── indirect_jump3.json │ │ │ │ │ ├── indirect_jump4.json │ │ │ │ │ ├── jump0_AfterJumpdest.json │ │ │ │ │ ├── jump0_AfterJumpdest3.json │ │ │ │ │ ├── jump0_foreverOutOfGas.json │ │ │ │ │ ├── jump0_jumpdest0.json │ │ │ │ │ ├── jump0_jumpdest2.json │ │ │ │ │ ├── jump0_outOfBoundary.json │ │ │ │ │ ├── jump0_withoutJumpdest.json │ │ │ │ │ ├── jump1.json │ │ │ │ │ ├── jumpAfterStop.json │ │ │ │ │ ├── jumpDynamicJumpSameDest.json │ │ │ │ │ ├── jumpHigh.json │ │ │ │ │ ├── jumpInsidePushWithJumpDest.json │ │ │ │ │ ├── jumpInsidePushWithoutJumpDest.json │ │ │ │ │ ├── jumpOntoJump.json │ │ │ │ │ ├── jumpTo1InstructionafterJump.json │ │ │ │ │ ├── jumpTo1InstructionafterJump_jumpdestFirstInstruction.json │ │ │ │ │ ├── jumpTo1InstructionafterJump_noJumpDest.json │ │ │ │ │ ├── jumpToUint64maxPlus1.json │ │ │ │ │ ├── jumpToUintmaxPlus1.json │ │ │ │ │ ├── jumpdestBigList.json │ │ │ │ │ ├── jumpi0.json │ │ │ │ │ ├── jumpi1.json │ │ │ │ │ ├── jumpi1_jumpdest.json │ │ │ │ │ ├── jumpiAfterStop.json │ │ │ │ │ ├── jumpiOutsideBoundary.json │ │ │ │ │ ├── jumpiToUint64maxPlus1.json │ │ │ │ │ ├── jumpiToUintmaxPlus1.json │ │ │ │ │ ├── jumpi_at_the_end.json │ │ │ │ │ ├── jumpifInsidePushWithJumpDest.json │ │ │ │ │ ├── jumpifInsidePushWithoutJumpDest.json │ │ │ │ │ ├── kv1.json │ │ │ │ │ ├── log1MemExp.json │ │ │ │ │ ├── loop_stacklimit_1020.json │ │ │ │ │ ├── loop_stacklimit_1021.json │ │ │ │ │ ├── memory1.json │ │ │ │ │ ├── mloadError0.json │ │ │ │ │ ├── mloadError1.json │ │ │ │ │ ├── mloadMemExp.json │ │ │ │ │ ├── mloadOutOfGasError2.json │ │ │ │ │ ├── msize0.json │ │ │ │ │ ├── msize1.json │ │ │ │ │ ├── msize2.json │ │ │ │ │ ├── msize3.json │ │ │ │ │ ├── mstore0.json │ │ │ │ │ ├── mstore1.json │ │ │ │ │ ├── mstore8MemExp.json │ │ │ │ │ ├── mstore8WordToBigError.json │ │ │ │ │ ├── mstore8_0.json │ │ │ │ │ ├── mstore8_1.json │ │ │ │ │ ├── mstoreMemExp.json │ │ │ │ │ ├── mstoreWordToBigError.json │ │ │ │ │ ├── mstore_mload0.json │ │ │ │ │ ├── pc0.json │ │ │ │ │ ├── pc1.json │ │ │ │ │ ├── pop0.json │ │ │ │ │ ├── pop1.json │ │ │ │ │ ├── return1.json │ │ │ │ │ ├── return2.json │ │ │ │ │ ├── sha3MemExp.json │ │ │ │ │ ├── sstore_load_0.json │ │ │ │ │ ├── sstore_load_1.json │ │ │ │ │ ├── sstore_load_2.json │ │ │ │ │ ├── sstore_underflow.json │ │ │ │ │ ├── stack_loop.json │ │ │ │ │ ├── stackjump1.json │ │ │ │ │ ├── swapAt52becameMstore.json │ │ │ │ │ └── when.json │ │ │ │ ├── vmPushDupSwapTest/ │ │ │ │ │ ├── dup1.json │ │ │ │ │ ├── dup10.json │ │ │ │ │ ├── dup11.json │ │ │ │ │ ├── dup12.json │ │ │ │ │ ├── dup13.json │ │ │ │ │ ├── dup14.json │ │ │ │ │ ├── dup15.json │ │ │ │ │ ├── dup16.json │ │ │ │ │ ├── dup2.json │ │ │ │ │ ├── dup2error.json │ │ │ │ │ ├── dup3.json │ │ │ │ │ ├── dup4.json │ │ │ │ │ ├── dup5.json │ │ │ │ │ ├── dup6.json │ │ │ │ │ ├── dup7.json │ │ │ │ │ ├── dup8.json │ │ │ │ │ ├── dup9.json │ │ │ │ │ ├── push1.json │ │ │ │ │ ├── push10.json │ │ │ │ │ ├── push11.json │ │ │ │ │ ├── push12.json │ │ │ │ │ ├── push13.json │ │ │ │ │ ├── push14.json │ │ │ │ │ ├── push15.json │ │ │ │ │ ├── push16.json │ │ │ │ │ ├── push17.json │ │ │ │ │ ├── push18.json │ │ │ │ │ ├── push19.json │ │ │ │ │ ├── push1_missingStack.json │ │ │ │ │ ├── push2.json │ │ │ │ │ ├── push20.json │ │ │ │ │ ├── push21.json │ │ │ │ │ ├── push22.json │ │ │ │ │ ├── push23.json │ │ │ │ │ ├── push24.json │ │ │ │ │ ├── push25.json │ │ │ │ │ ├── push26.json │ │ │ │ │ ├── push27.json │ │ │ │ │ ├── push28.json │ │ │ │ │ ├── push29.json │ │ │ │ │ ├── push3.json │ │ │ │ │ ├── push30.json │ │ │ │ │ ├── push31.json │ │ │ │ │ ├── push32.json │ │ │ │ │ ├── push32AndSuicide.json │ │ │ │ │ ├── push32FillUpInputWithZerosAtTheEnd.json │ │ │ │ │ ├── push32Undefined.json │ │ │ │ │ ├── push32Undefined2.json │ │ │ │ │ ├── push32Undefined3.json │ │ │ │ │ ├── push33.json │ │ │ │ │ ├── push4.json │ │ │ │ │ ├── push5.json │ │ │ │ │ ├── push6.json │ │ │ │ │ ├── push7.json │ │ │ │ │ ├── push8.json │ │ │ │ │ ├── push9.json │ │ │ │ │ ├── swap1.json │ │ │ │ │ ├── swap10.json │ │ │ │ │ ├── swap11.json │ │ │ │ │ ├── swap12.json │ │ │ │ │ ├── swap13.json │ │ │ │ │ ├── swap14.json │ │ │ │ │ ├── swap15.json │ │ │ │ │ ├── swap16.json │ │ │ │ │ ├── swap2.json │ │ │ │ │ ├── swap2error.json │ │ │ │ │ ├── swap3.json │ │ │ │ │ ├── swap4.json │ │ │ │ │ ├── swap5.json │ │ │ │ │ ├── swap6.json │ │ │ │ │ ├── swap7.json │ │ │ │ │ ├── swap8.json │ │ │ │ │ ├── swap9.json │ │ │ │ │ └── swapjump1.json │ │ │ │ ├── vmRandomTest/ │ │ │ │ │ ├── 201503102320PYTHON.json │ │ │ │ │ ├── 201503110206PYTHON.json │ │ │ │ │ ├── 201503110219PYTHON.json │ │ │ │ │ ├── 201503110346PYTHON_PUSH24.json │ │ │ │ │ ├── 201503111844PYTHON.json │ │ │ │ │ └── 201503112218PYTHON.json │ │ │ │ ├── vmSha3Test/ │ │ │ │ │ ├── sha3_0.json │ │ │ │ │ ├── sha3_1.json │ │ │ │ │ ├── sha3_2.json │ │ │ │ │ ├── sha3_3oog.json │ │ │ │ │ ├── sha3_4oog.json │ │ │ │ │ ├── sha3_5oog.json │ │ │ │ │ ├── sha3_6oog.json │ │ │ │ │ ├── sha3_bigOffset2.json │ │ │ │ │ ├── sha3_bigOffsetoog.json │ │ │ │ │ ├── sha3_bigSizeoog.json │ │ │ │ │ ├── sha3_memSizeNoQuadraticCost31.json │ │ │ │ │ ├── sha3_memSizeQuadraticCost32.json │ │ │ │ │ ├── sha3_memSizeQuadraticCost32_zeroSize.json │ │ │ │ │ ├── sha3_memSizeQuadraticCost33.json │ │ │ │ │ ├── sha3_memSizeQuadraticCost63.json │ │ │ │ │ ├── sha3_memSizeQuadraticCost64.json │ │ │ │ │ ├── sha3_memSizeQuadraticCost64_2.json │ │ │ │ │ └── sha3_memSizeQuadraticCost65.json │ │ │ │ ├── vmSystemOperations/ │ │ │ │ │ ├── TestNameRegistrator.json │ │ │ │ │ ├── return0.json │ │ │ │ │ ├── return1.json │ │ │ │ │ ├── return2.json │ │ │ │ │ ├── suicide0.json │ │ │ │ │ ├── suicideNotExistingAccount.json │ │ │ │ │ └── suicideSendEtherToMe.json │ │ │ │ └── vmTests/ │ │ │ │ └── suicide.json │ │ │ └── evm_test.py │ │ ├── keccak_tests.py │ │ ├── smt/ │ │ │ ├── __init__.py │ │ │ ├── independece_solver_test.py │ │ │ └── model_test.py │ │ ├── state/ │ │ │ ├── __init__.py │ │ │ ├── calldata_test.py │ │ │ ├── mstack_test.py │ │ │ ├── mstate_test.py │ │ │ ├── storage_test.py │ │ │ └── world_state_account_exist_load_test.py │ │ ├── strategy/ │ │ │ ├── beam_test.py │ │ │ └── loop_bound_test.py │ │ ├── transaction/ │ │ │ ├── __init__.py │ │ │ ├── create_transaction_test.py │ │ │ └── symbolic_test.py │ │ ├── transaction_test.py │ │ └── tx_prioritisation_test.py │ ├── mythril/ │ │ ├── mythril_analyzer_test.py │ │ ├── mythril_config_test.py │ │ └── mythril_disassembler_test.py │ ├── plugin/ │ │ ├── interface_test.py │ │ └── loader_test.py │ ├── pre-commit-hooks/ │ │ ├── Counter.sol │ │ └── test.sh │ ├── rpc_test.py │ ├── solidity_contract_test.py │ ├── statespace_test.py │ ├── testdata/ │ │ ├── __init__.py │ │ ├── compile.py │ │ ├── concolic_io/ │ │ │ ├── multi_contract_example.sol │ │ │ ├── multi_contract_example_input.json │ │ │ ├── multiple_example.sol │ │ │ ├── multiple_example_input.json │ │ │ ├── simple_example.sol │ │ │ ├── simple_example_input.json │ │ │ ├── two_contract.sol │ │ │ └── two_contract_input.json │ │ ├── input_contracts/ │ │ │ ├── SecureVault.sol │ │ │ ├── SimpleModifier.sol │ │ │ ├── WalletLibrary.sol │ │ │ ├── base_case.sol │ │ │ ├── calls.sol │ │ │ ├── complex.sol │ │ │ ├── constructor_assert.sol │ │ │ ├── destruct.sol │ │ │ ├── destruct_crlf.sol │ │ │ ├── environments.sol │ │ │ ├── ether_send.sol │ │ │ ├── exceptions.sol │ │ │ ├── exceptions_0.8.0.sol │ │ │ ├── extcall.sol │ │ │ ├── flag_array.sol │ │ │ ├── hash_test.sol │ │ │ ├── integer_edge_case.sol │ │ │ ├── kcalls.sol │ │ │ ├── large.sol │ │ │ ├── metacoin.sol │ │ │ ├── multi_contracts.sol │ │ │ ├── nonascii.sol │ │ │ ├── old_origin.sol │ │ │ ├── old_version.sol │ │ │ ├── origin.sol │ │ │ ├── overflow.sol │ │ │ ├── regression_1.sol │ │ │ ├── requirements_violation_neg.sol │ │ │ ├── requirements_violation_pos.sol │ │ │ ├── returnvalue.sol │ │ │ ├── rubixi.sol │ │ │ ├── safe_funcs.sol │ │ │ ├── simple_theft.sol │ │ │ ├── suicide.sol │ │ │ ├── symbolic_exec_bytecode.sol │ │ │ ├── theft.sol │ │ │ ├── transient.sol │ │ │ ├── transient_bug.sol │ │ │ ├── transient_bug_2.sol │ │ │ ├── transient_recursive.sol │ │ │ ├── tx.sol │ │ │ ├── underflow.sol │ │ │ ├── unexpected_ether_neg.sol │ │ │ ├── unexpected_ether_pos.sol │ │ │ ├── version_2.sol │ │ │ ├── version_3.sol │ │ │ ├── version_4.sol │ │ │ ├── version_chaos.sol │ │ │ ├── version_contract.sol │ │ │ ├── version_contract_0.7.0.sol │ │ │ ├── version_contract_0.8.0.sol │ │ │ ├── version_patch.sol │ │ │ └── weak_random.sol │ │ ├── inputs/ │ │ │ ├── calls.sol.o │ │ │ ├── coverage.sol.o │ │ │ ├── environments.sol.o │ │ │ ├── ether_send.sol.o │ │ │ ├── exceptions.sol.o │ │ │ ├── exceptions_0.8.0.sol.o │ │ │ ├── extcall.sol.o │ │ │ ├── flag_array.sol.o │ │ │ ├── kinds_of_calls.sol.o │ │ │ ├── metacoin.sol.o │ │ │ ├── multi_contracts.sol.o │ │ │ ├── nonascii.sol.o │ │ │ ├── origin.sol.o │ │ │ ├── overflow.sol.o │ │ │ ├── returnvalue.sol.o │ │ │ ├── safe_funcs.sol.o │ │ │ ├── suicide.sol.o │ │ │ ├── symbolic_exec_bytecode.sol.o │ │ │ └── underflow.sol.o │ │ ├── json_test_dir/ │ │ │ ├── PRC20.sol │ │ │ ├── dir_a/ │ │ │ │ ├── input_file.sol │ │ │ │ └── input_file_args.sol │ │ │ ├── test_file.json │ │ │ └── test_file_disable.json │ │ └── outputs_expected/ │ │ ├── calls.sol.o.easm │ │ ├── calls.sol.o.graph.html │ │ ├── environments.sol.o.easm │ │ ├── environments.sol.o.graph.html │ │ ├── ether_send.sol.o.easm │ │ ├── ether_send.sol.o.graph.html │ │ ├── exceptions.sol.o.easm │ │ ├── exceptions.sol.o.graph.html │ │ ├── kinds_of_calls.sol.o.easm │ │ ├── kinds_of_calls.sol.o.graph.html │ │ ├── metacoin.sol.o.easm │ │ ├── metacoin.sol.o.graph.html │ │ ├── multi_contracts.sol.o.easm │ │ ├── multi_contracts.sol.o.graph.html │ │ ├── nonascii.sol.o.easm │ │ ├── nonascii.sol.o.graph.html │ │ ├── origin.sol.o.easm │ │ ├── origin.sol.o.graph.html │ │ ├── overflow.sol.o.easm │ │ ├── overflow.sol.o.graph.html │ │ ├── returnvalue.sol.o.easm │ │ ├── returnvalue.sol.o.graph.html │ │ ├── suicide.sol.o.easm │ │ ├── suicide.sol.o.graph.html │ │ ├── underflow.sol.o.easm │ │ └── underflow.sol.o.graph.html │ ├── teststorage/ │ │ ├── contractstorage.fs │ │ ├── contractstorage.fs.index │ │ └── contractstorage.fs.tmp │ └── util_tests.py └── tox.ini ================================================ FILE CONTENTS ================================================ ================================================ FILE: .circleci/config.yml ================================================ defaults: &defaults docker: # TODO: Try to replace this with `mythril/mythx-ci` image. That image is # used for new integration testing, and it is build on top of the previous # `mythril/dev_test_environment:0.0.43`, though a bit newer versions, thus # there is a chance that it breaks some small things. - image: norhh/mythril-ci version: 2 jobs: # Basic testing of a new commit to any branch. test: <<: *defaults parallelism: 4 steps: - checkout: path: /home/mythril # Uncomment, for local testing with circleci command, as it ignores # path param in checkout command, and this symlink compenstates for that. # - run: ln -s /root/project /home/mythril - restore-cache: keys: - tox-env-{{ checksum "/home/mythril/setup.py" }} - run: name: Install tox envs command: tox -vv --notest working_directory: /home/mythril environment: LC_ALL: en_US.ASCII LANG: en_US.ASCII - save_cache: key: tox-env-{{ checksum "/home/mythril/setup.py" }} paths: - .tox/py* - /root/.cache/pip/wheels/ - run: background: true name: Launch of background geth instance command: geth --syncmode full --http --http.api="db,eth,net,web3,personal" - run: name: Unit-testing command: | TESTFILES=$(circleci tests glob tests/**/*test.py | circleci tests split --split-by=timings) tox -- $TESTFILES working_directory: /home/mythril no_output_timeout: 10m environment: LANG: en_US.ASCII MYTHRIL_DIR: '/home/mythril' INFURA_ID: $INFURA_ID - store_test_results: path: /home/mythril/.tox/output - store_artifacts: path: /home/mythril/.tox/output - run: name: Ensuring that setup script is functional command: python3 -m build working_directory: /home/mythril #- run: # name: Sonar analysis # command: if [ -z "$CIRCLE_PR_NUMBER" ]; then if [ -z "$CIRCLE_TAG" ]; then # sonar-scanner -Dsonar.projectKey=$SONAR_PROJECT_KEY # -Dsonar.organization=$SONAR_ORGANIZATION # -Dsonar.branch.name=$CIRCLE_BRANCH # -Dsonar.projectBaseDir=/home/mythril -Dsonar.sources=mythril # -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.tests=/home/mythril/tests # -Dsonar.login=$SONAR_LOGIN; fi; fi # - run: # name: Integration tests # command: if [ -z "$CIRCLE_PR_NUMBER" ]; then ./run-integration-tests.sh; fi # working_directory: /home # The resource_class feature allows configuring CPU and RAM resources for each job. Different resource classes are available for different executors. https://circleci.com/docs/2.0/configuration-reference/#resourceclass resource_class: large # integration_tests: # docker: # - image: circleci/python:3.6.4 # working_directory: ~/project # steps: # - checkout # - setup_remote_docker # - run: # name: Clone Edelweiss # command: git clone --recurse-submodules https://$GITHUB_TOKEN@github.com/Consensys/Edelweiss.git # - run: # name: Update SWC-registry # working_directory: ~/project/Edelweiss # command: git submodule update --recursive --remote # - run: # name: Build Edelweiss # command: | # docker build \ # --build-arg AWS_ACCESS_KEY_ID=$S3_AWS_ACCESS_KEY_ID \ # --build-arg AWS_SECRET_ACCESS_KEY=$S3_AWS_SECRET_ACCESS_KEY \ # --build-arg AWS_DEFAULT_REGION=us-east-1 --rm -t "edelweiss-mythril:latest" . -f Edelweiss/dockerfiles/mythril/Dockerfile # - run: # name: Run Edelweiss # command: | # docker run \ # -e CIRCLE_BRANCH=$CIRCLE_BRANCH \ # -e CIRCLE_SHA1=$CIRCLE_SHA1 \ # -e CIRCLE_BUILD_NUM=$CIRCLE_BUILD_NUM \ # -e CIRCLE_BUILD_URL=$CIRCLE_BUILD_URL \ # -e CIRCLE_WEBHOOK_URL=$CIRCLE_WEBHOOK_URL \ # -e MONGO_URL=$MONGO_URL \ # --rm edelweiss-mythril:latest \ # --timeout 90 \ # --output-dir /opt/edelweiss \ # --s3 \ # --dynamodb \ # --circle-ci CircleCI/mythril.csv \ # --ignore-false-positives $IGNORE_FALSE_POSITIVES \ # --ignore-regressions $IGNORE_REGRESSIONS pypi_release: <<: *defaults steps: - checkout: path: /home/mythril - run: name: Verify Git tag vs. version command: python3 setup.py verify working_directory: /home/mythril - run: name: Build command: python3 setup.py sdist working_directory: /home/mythril - run: name: Deploy command: twine upload dist/* working_directory: /home/mythril # Release of the mainstream (current stable) version as mythril/myth # container. dockerhub_release: docker: - image: docker:latest steps: - checkout - setup_remote_docker - run: name: Install bash command: apk add --no-cache bash - run: name: Building Docker Image command: ./docker_build_and_deploy.sh mythril/myth resource_class: arm.large # Release of the latest development version as mythril/myth-dev container. dockerhub_dev_release: docker: - image: docker:latest steps: - checkout - setup_remote_docker - run: name: Install bash command: apk add --no-cache bash - run: name: Building Docker Image command: ./docker_build_and_deploy.sh mythril/myth-dev # The resource_class feature allows configuring CPU and RAM resources for each job. Different resource classes are available for different executors. https://circleci.com/docs/2.0/configuration-reference/#resourceclass resource_class: arm.xlarge workflows: version: 2 build: jobs: - test: filters: tags: only: /.*/ - pypi_release: filters: branches: ignore: /.*/ tags: only: /v[0-9]+(\.[0-9]+)*/ requires: - test - dockerhub_dev_release: filters: branches: only: develop requires: - test - dockerhub_release: filters: branches: ignore: /.*/ tags: only: /v[0-9]+(\.[0-9]+)*/ requires: - test ================================================ FILE: .dockerignore ================================================ /.* /build /docker-bake.hcl /Dockerfile ================================================ FILE: .drone.yml ================================================ kind: pipeline name: default platform: os: linux arch: amd64 steps: - name: edelweiss_swc image: mythx.azurecr.io/tools/edelweiss environment: IGNORE_FALSE_POSITIVES: from_secret: IGNORE_FALSE_POSITIVES IGNORE_REGRESSIONS: from_secret: IGNORE_REGRESSIONS AWS_DEFAULT_REGION: from_secret: AWS_DEFAULT_REGION AWS_ACCESS_KEY_ID: from_secret: AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: from_secret: AWS_SECRET_ACCESS_KEY MONGO_URL: from_secret: MONGO_URL commands: # CIRCLE_* env vars is used by edelweiss cli to generate # the reports storage directory structure - export CIRCLE_BUILD_NUM=$DRONE_BUILD_NUMBER - export CIRCLE_BUILD_URL=$DRONE_BUILD_LINK - export CIRCLE_BRANCH=$DRONE_BRANCH - export CIRCLE_SHA1=$DRONE_COMMIT_SHA # install pip module from current dir - pip3 install $(pwd) # update SWC-registry - cd /edelweiss - git submodule update --init --recursive - git submodule update --remote --recursive # run edelewiss tests # Temporarily stop Edelweiss drone #- edelweiss-cli # -p mythril # --timeout 90 # --output-dir $(pwd) # --s3 # --dynamodb # --circle-ci CircleCI/mythril.csv # --ignore-false-positives $IGNORE_FALSE_POSITIVES # --ignore-regressions $IGNORE_REGRESSIONS when: branch: - develop - master event: - push - tag image_pull_secrets: - DOCKER_CONFIG_JSON ================================================ FILE: .editorconfig ================================================ root = true [*] end_of_line = lf insert_final_newline = true [*.py] indent_style = space indent_size = 4 charset = utf-8 [*.jinja2] insert_final_newline = false ================================================ FILE: .gitattributes ================================================ tests/testdata/* linguist-detectable=false static/* linguist-documentation # Solidity *.sol linguist-language=Solidity ================================================ FILE: .github/ISSUE_TEMPLATE/analysis-module.md ================================================ --- name: Analysis module about: Create an analysis module feature request --- ## Description ## Tests ## Implementation details ## Links ================================================ FILE: .github/ISSUE_TEMPLATE/bug-report.md ================================================ --- name: Bug report about: Tell us about Mythril bugs to help us improve --- ## Description ## How to Reproduce ## Expected behavior ## Screenshots ## Environment ## Additional Environment or Context ================================================ FILE: .github/ISSUE_TEMPLATE/feature-request.md ================================================ --- name: Feature Request about: Tell us about a new feature that would make Mythril better --- ## Description ## Background ## Tests ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" groups: workflows: patterns: - '*' - package-ecosystem: "pip" directory: "/" schedule: interval: "weekly" ================================================ FILE: .github/workflows/container.yml ================================================ on: pull_request: paths: - .github/workflows/container.yml - Dockerfile - docker_build_and_deploy.sh - requirements.txt - setup.py name: container concurrency: # Concurrency group that uses the workflow name and PR number if available # or commit SHA as a fallback. If a new build is triggered under that # concurrency group while a previous build is running it will be canceled. # Repeated pushes to a PR will cancel all previous builds, while multiple # merges to a branch will not cancel. group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest timeout-minutes: 60 steps: - uses: actions/checkout@v4 - name: build and test run: | # when no DOCKERHUB_USERNAME is set, this only builds the # container and runs the myth-smoke-test ./docker_build_and_deploy.sh mythril/myth-dev ================================================ FILE: .github/workflows/pre-commit-hooks-test.yml ================================================ name: pre-commit on: push: branches: - master - develop tags: - '*' pull_request: paths: - .github/workflows/pre-commit-hooks-test.yml - .pre-commit-hooks.yaml - tests/pre-commit-hooks/* - requirements.txt - setup.py jobs: hooks-test: runs-on: ubuntu-latest name: test hooks steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install pre-commit run: | python -m pip install pre-commit - name: Test hooks run: | ./tests/pre-commit-hooks/test.sh ================================================ FILE: .github/workflows/pre-commit.yml ================================================ on: push: branches: - master - develop tags: - '*' pull_request: name: pre-commit concurrency: # Concurrency group that uses the workflow name and PR number if available # or commit SHA as a fallback. If a new build is triggered under that # concurrency group while a previous build is running it will be canceled. # Repeated pushes to a PR will cancel all previous builds, while multiple # merges to a branch will not cancel. group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: true jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.9' - uses: pre-commit/action@v3.0.1 ================================================ FILE: .gitignore ================================================ # Created by https://www.gitignore.io/api/linux,macos,python,windows ### Linux ### *~ # temporary files which can be created if a process still has a handle open of a deleted file .fuse_hidden* # KDE directory preferences .directory # Linux trash folder which might appear on any partition or disk .Trash-* # .nfs files are created when an open file is removed but is still being accessed .nfs* ### macOS ### *.DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache .pytest_cache/ nosetests.xml coverage.xml *.cover .hypothesis/ # Translations *.mo *.pot # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule.* # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ ### Windows ### # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Folder config file Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msm *.msp # Windows shortcuts *.lnk # End of https://www.gitignore.io/api/linux,macos,python,windows *.asm *.lock *.svg lol* .idea* coverage_html_report/ tests/testdata/outputs_current/ tests/testdata/outputs_current_laser_result/ tests/testdata/mythril_config_inputs/config.ini # VSCode .vscode ================================================ FILE: .pre-commit-config.yaml ================================================ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks # Apply to all files without commiting: # pre-commit run --all-files # Update this file: # pre-commit autoupdate repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-toml - id: check-yaml - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.9.1 hooks: # lint & attempt to correct failures - id: ruff args: [--fix, --show-fixes] # compatible replacement for black - id: ruff-format - repo: https://github.com/scop/pre-commit-shfmt rev: v3.10.0-2 hooks: - id: shfmt args: [--write, --indent, '4'] - repo: https://github.com/shellcheck-py/shellcheck-py rev: v0.10.0.1 hooks: - id: shellcheck - repo: https://github.com/hadolint/hadolint rev: v2.12.0 hooks: - id: hadolint-docker - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks rev: v2.14.0 hooks: - id: pretty-format-toml args: [--autofix] - repo: https://github.com/python-jsonschema/check-jsonschema rev: 0.31.0 hooks: - id: check-circle-ci - id: check-github-workflows - id: check-dependabot - repo: meta hooks: - id: check-hooks-apply - id: check-useless-excludes ================================================ FILE: .pre-commit-hooks.yaml ================================================ - id: mythril name: Mythril description: Analyze EVM bytecode with Mythril entry: myth args: - analyze language: python types: ["solidity"] ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to Mythril Hi, if you are reading this that means that you probably want to contribute to Mythril, awesome! If not, then this file might not contain much useful information for you. ## Creating an issue If you have found a problem with Mythril or want to propose a new feature then you can do this using GitHub issues. We already created some templates to make this process easier, but if your issue/feature request does not fit within the template then feel free to deviate. If you have a small question or aren't sure if you should create an issue for your problem/suggestion then you can always hop by on our [Discord server](https://discord.gg/FGMkcU2). # Coding If you want to help out with the development of Mythril then you can take a look at our issues or [Waffle board](https://waffle.io/ConsenSys/mythril). Before you start working on an issue please stop by on Discord to message a collaborator, this way we can assign you to the issue making sure nobody does double work. We can also provide you with support through Discord if there are any questions during the development process. ## New ideas Before you start working on a new idea, it's useful to create an issue on GitHub, that way we know what you want to implement and that you are working on it. Additionally, it might happen that your feature does not fit with our roadmap, in which case it would be unfortunate if you have already spent some time working on it. ================================================ FILE: Dockerfile ================================================ # syntax=docker/dockerfile:1 ARG PYTHON_VERSION=3.10 ARG INSTALLED_SOLC_VERSIONS FROM python:${PYTHON_VERSION} AS mythril-wheels WORKDIR /wheels # Enable cargo sparse-registry to prevent it using large amounts of memory in # docker builds, and speed up builds by downloading less. # https://github.com/rust-lang/cargo/issues/10781#issuecomment-1163819998 ENV CARGO_UNSTABLE_SPARSE_REGISTRY=true SHELL ["/bin/bash", "-euo", "pipefail", "-c"] RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH=/root/.cargo/bin:$PATH RUN --mount=source=requirements.txt,target=/run/requirements.txt \ pip wheel -r /run/requirements.txt COPY . /mythril RUN pip wheel --no-deps /mythril # Solidity Compiler Version Manager. This provides cross-platform solc builds. # It's used by foundry to provide solc. https://github.com/alloy-rs/svm-rs FROM rust:slim-bookworm AS solidity-compiler-version-manager RUN mkdir -p /svm-rs/bin && \ cargo install svm-rs --root /svm-rs FROM python:${PYTHON_VERSION}-slim AS myth ARG PYTHON_VERSION # Space-separated version string without leading 'v' (e.g. "0.4.21 0.4.22") ARG INSTALLED_SOLC_VERSIONS COPY --from=solidity-compiler-version-manager /svm-rs/bin/* /usr/local/bin/ RUN --mount=from=mythril-wheels,source=/wheels,target=/wheels \ export PYTHONDONTWRITEBYTECODE=1 && pip install --no-cache-dir /wheels/*.whl RUN adduser --disabled-password mythril USER mythril WORKDIR /home/mythril # pre-install solc versions RUN set -x; [ -z "${INSTALLED_SOLC_VERSIONS}" ] || svm install ${INSTALLED_SOLC_VERSIONS} COPY --chown=mythril:mythril \ ./mythril/support/assets/signatures.db \ /home/mythril/.mythril/signatures.db COPY --chown=root:root --chmod=755 ./docker/docker-entrypoint.sh / COPY --chown=root:root --chmod=755 \ ./docker/sync-svm-solc-versions-with-solcx.sh \ /usr/local/bin/sync-svm-solc-versions-with-solcx ENTRYPOINT ["/docker-entrypoint.sh"] # Basic sanity checks to make sure the build is functional FROM myth AS myth-smoke-test-execution SHELL ["/bin/bash", "-euo", "pipefail", "-c"] WORKDIR /smoke-test COPY --chmod=755 <<"EOT" /smoke-test.sh #!/usr/bin/env bash set -x -euo pipefail # Check solcx knows about svm solc versions svm install 0.5.0 sync-svm-solc-versions-with-solcx python -c ' import solcx print("\n".join(str(v) for v in solcx.get_installed_solc_versions())) ' | grep -P '^0\.5\.0$' || { echo "solcx did not report svm-installed solc version"; exit 1 } # Show installed packages and versions pip list # Check myth can run myth version myth function-to-hash 'function transfer(address _to, uint256 _value) public returns (bool success)' myth analyze /solidity_examples/origin.sol -t 1 > origin.log || true grep 'SWC ID: 115' origin.log || { error "Failed to detect SWC ID: 115 in origin.sol"; exit 1 } # Check that the entrypoint works [[ $(/docker-entrypoint.sh version) == $(myth version) ]] [[ $(/docker-entrypoint.sh echo hi) == hi ]] [[ $(/docker-entrypoint.sh bash -c "printf '>%s<' 'foo bar'") == ">foo bar<" ]] EOT RUN --mount=source=./solidity_examples,target=/solidity_examples \ /smoke-test.sh 2>&1 | tee smoke-test.log FROM scratch AS myth-smoke-test COPY --from=myth-smoke-test-execution /smoke-test/* / ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) since 2017 Bernhard Mueller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MANIFEST.in ================================================ include mythril/support/assets/* include mythril/analysis/templates/* include requirements.txt ================================================ FILE: README.md ================================================ # Mythril

[![Discord](https://img.shields.io/discord/697535391594446898)](https://discord.com/invite/consensys) [![PyPI](https://badge.fury.io/py/mythril.svg)](https://pypi.python.org/pypi/mythril) [![Read the Docs](https://readthedocs.org/projects/mythril-classic/badge/?version=master)](https://mythril-classic.readthedocs.io/en/develop/) [![CircleCI](https://dl.circleci.com/status-badge/img/gh/Consensys/mythril/tree/develop.svg?style=shield&circle-token=fd6738fd235f6c2d8e10234259090e3b05190d0e)](https://dl.circleci.com/status-badge/redirect/gh/Consensys/mythril/tree/develop) [![Sonarcloud - Maintainability](https://sonarcloud.io/api/project_badges/measure?project=mythril&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=mythril) [![Pypi Installs](https://static.pepy.tech/badge/mythril)](https://pepy.tech/project/mythril) [![DockerHub Pulls](https://img.shields.io/docker/pulls/mythril/myth.svg)](https://cloud.docker.com/u/mythril/repository/docker/mythril/myth) Mythril is a symbolic-execution-based security analysis tool for EVM bytecode. It detects security vulnerabilities in smart contracts built for Ethereum and other EVM-compatible blockchains. Whether you want to contribute, need support, or want to learn what we have cooking for the future, you can checkout diligence-mythx channel in [ConsenSys Discord server](https://discord.gg/consensys). ## Installation and setup Get it with [Docker](https://www.docker.com): ```bash $ docker pull mythril/myth ``` Install from Pypi (Python 3.7-3.10): ```bash $ pip3 install mythril ``` Use it via pre-commit hook (replace `$GIT_TAG` with real tag): ```YAML - repo: https://github.com/Consensys/mythril rev: $GIT_TAG hooks: - id: mythril ``` Additionally, set `args: [disassemble]` or `args: [read-storage]` to use a different command than `analyze`. See the [docs](https://mythril-classic.readthedocs.io/en/master/installation.html) for more detailed instructions. ## Usage Run: ``` $ myth analyze ``` Or: ``` $ myth analyze -a ``` Specify the maximum number of transactions to explore with `-t `. You can also set a timeout with `--execution-timeout `. Here is an example of running Mythril on the file `killbilly.sol` which is in the `solidity_examples` directory for `3` transactions: ``` > myth a killbilly.sol -t 3 ==== Unprotected Selfdestruct ==== SWC ID: 106 Severity: High Contract: KillBilly Function name: commencekilling() PC address: 354 Estimated Gas Usage: 974 - 1399 Any sender can cause the contract to self-destruct. Any sender can trigger execution of the SELFDESTRUCT instruction to destroy this contract account and withdraw its balance to an arbitrary address. Review the transaction trace generated for this issue and make sure that appropriate security controls are in place to prevent unrestricted access. -------------------- In file: killbilly.sol:22 selfdestruct(msg.sender) -------------------- Initial State: Account: [CREATOR], balance: 0x2, nonce:0, storage:{} Account: [ATTACKER], balance: 0x1001, nonce:0, storage:{} Transaction Sequence: Caller: [CREATOR], calldata: , decoded_data: , value: 0x0 Caller: [ATTACKER], function: killerize(address), txdata: 0x9fa299cc000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, decoded_data: ('0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',), value: 0x0 Caller: [ATTACKER], function: activatekillability(), txdata: 0x84057065, value: 0x0 Caller: [ATTACKER], function: commencekilling(), txdata: 0x7c11da20, value: 0x0 ``` Instructions for using Mythril are found on the [docs](https://mythril-classic.readthedocs.io/en/develop/). For support or general discussions please checkout [diligence-mythx channel](https://discord.com/channels/697535391594446898/712829485350649886) in [ConsenSys Discord server](https://discord.gg/consensys).. ## Building the Documentation Mythril's documentation is contained in the `docs` folder and is published to [Read the Docs](https://mythril-classic.readthedocs.io/en/develop/). It is based on Sphinx and can be built using the Makefile contained in the subdirectory: ``` cd docs make html ``` This will create a `build` output directory containing the HTML output. Alternatively, PDF documentation can be built with `make latexpdf`. The available output format options can be seen with `make help`. ## Vulnerability Remediation Visit the [Smart Contract Vulnerability Classification Registry](https://swcregistry.io/) to find detailed information and remediation guidance for the vulnerabilities reported. ================================================ FILE: all_tests.sh ================================================ #!/bin/bash set -euo pipefail echo -n "Checking Python version... " python -c 'import sys print(sys.version) assert sys.version_info[0:2] >= (3,5), \ """Please make sure you are using Python 3.5 or later. You ran with {}""".format(sys.version)' || exit $? rm -rf ./tests/testdata/outputs_current/ mkdir -p ./tests/testdata/outputs_current/ rm -rf ./tests/testdata/outputs_current_laser_result/ mkdir -p ./tests/testdata/outputs_current_laser_result/ mkdir -p /tmp/test-reports pytest --junitxml=/tmp/test-reports/junit.xml ================================================ FILE: coverage_report.sh ================================================ #!/bin/sh python --version echo "Please make sure you are using python 3.6.x" rm -rf ./tests/testdata/outputs_current/ mkdir -p ./tests/testdata/outputs_current/ rm -rf ./tests/testdata/outputs_current_laser_result/ mkdir -p ./tests/testdata/outputs_current_laser_result/ rm -rf coverage_html_report py.test \ --cov=mythril \ --cov-config=tox.ini \ --cov-report=html:coverage_reports/coverage_html_report \ --cov-report=xml:coverage_reports/coverage_xml_report.xml ================================================ FILE: docker/docker-entrypoint.sh ================================================ #!/usr/bin/env bash set -euo pipefail # Install extra solc versions if SOLC is set if [[ ${SOLC:-} != "" ]]; then read -ra solc_versions <<<"${SOLC:?}" svm install "${solc_versions[@]}" fi # Always sync versions, as the should be at least one solc version installed # in the base image, and we may be running as root rather than the mythril user. sync-svm-solc-versions-with-solcx # By default we run myth with options from arguments we received. But if the # first argument is a valid program, we execute that instead so that people can # run other commands without overriding the entrypoint (e.g. bash). if command -v "${1:-}" >/dev/null; then exec -- "$@" fi exec -- myth "$@" ================================================ FILE: docker/sync-svm-solc-versions-with-solcx.sh ================================================ #!/usr/bin/env bash set -euo pipefail # Let solcx know about the solc versions installed by svm. # We do this by symlinking svm's solc binaries into solcx's solc dir. [[ -e ~/.svm ]] || exit 0 mkdir -p ~/.solcx readarray -t svm_solc_bins <<<"$(find ~/.svm -type f -name 'solc-*')" [[ ${svm_solc_bins[0]} != "" ]] || exit 0 for svm_solc in "${svm_solc_bins[@]}"; do name=$(basename "${svm_solc:?}") version="${name#"solc-"}" # strip solc- prefix solcx_solc=~/.solcx/"solc-v${version:?}" if [[ ! -e $solcx_solc ]]; then ln -s "${svm_solc:?}" "${solcx_solc:?}" fi done ================================================ FILE: docker-bake.hcl ================================================ variable "REGISTRY" { default = "docker.io" } variable "VERSION" { default = "dev" } variable "PYTHON_VERSION" { default = "3.10" } variable "INSTALLED_SOLC_VERSIONS" { default = "0.8.19" } function "myth-tags" { params = [NAME] result = formatlist("${REGISTRY}/${NAME}:%s", split(",", VERSION)) } group "default" { targets = ["myth", "myth-smoke-test"] } target "_myth-base" { target = "myth" args = { PYTHON_VERSION = PYTHON_VERSION INSTALLED_SOLC_VERSIONS = INSTALLED_SOLC_VERSIONS } platforms = [ "linux/amd64", "linux/arm64" ] } target "myth" { inherits = ["_myth-base"] tags = myth-tags("mythril/myth") } target "myth-dev" { inherits = ["_myth-base"] tags = myth-tags("mythril/myth-dev") } target "myth-smoke-test" { inherits = ["_myth-base"] target = "myth-smoke-test" output = ["build/docker/smoke-test"] } ================================================ FILE: docker_build_and_deploy.sh ================================================ #!/bin/bash set -eo pipefail NAME=$1 if [[ ! $NAME =~ ^mythril/myth(-dev)?$ ]]; then echo "Error: unknown image name: $NAME" >&2 exit 1 fi if [ -n "$CIRCLE_TAG" ]; then GIT_VERSION=${CIRCLE_TAG#?} else GIT_VERSION=${CIRCLE_SHA1} fi export DOCKER_BUILDKIT=1 docker buildx create --use # Build and test all versions of the image. (The result will stay in the cache, # so the next build should be almost instant.) docker buildx bake myth-smoke-test if [ -z "$DOCKERHUB_USERNAME" ]; then echo "Finishing without pushing to dockerhub" exit 0 fi echo "$DOCKERHUB_PASSWORD" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin # strip mythril/ from NAME, e.g. myth or myth-dev BAKE_TARGET="${NAME#mythril/}" VERSION="${GIT_VERSION:?},latest" docker buildx bake --push "${BAKE_TARGET:?}" ================================================ FILE: docs/Makefile ================================================ # Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) ================================================ FILE: docs/make.bat ================================================ @ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=source set BUILDDIR=build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% :end popd ================================================ FILE: docs/source/about.rst ================================================ What is Mythril? ======================== Mythril is a security analysis tool for Ethereum smart contracts. It was `introduced at HITBSecConf 2018 `_. Mythril detects a range of security issues, including integer underflows, owner-overwrite-to-Ether-withdrawal, and others. Note that Mythril is targeted at finding common vulnerabilities, and is not able to discover issues in the business logic of an application. Furthermore, Mythril and symbolic executors are generally unsound, as they are often unable to explore all possible states of a program. ================================================ FILE: docs/source/analysis-modules.rst ================================================ Analysis Modules ================ Mythril's detection capabilities are written in modules in the `/analysis/module/modules `_ directory. .. toctree:: :maxdepth: 2 module-list.rst create-module.rst ================================================ FILE: docs/source/conf.py ================================================ # -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/master/config # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. import os import sys sys.path.insert(0, os.path.abspath("../../")) # -- Project information ----------------------------------------------------- project = "Mythril" copyright = "2019, ConsenSys Diligence" author = "ConsenSys Dilligence" # The short X.Y version version = "" # The full version, including alpha/beta/rc tags from mythril.__version__ import __version__ as VERSION release = VERSION # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.coverage", "sphinx.ext.mathjax", "sphinx.ext.viewcode", ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = ".rst" # The master toctree document. master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. pygments_style = None # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "sphinx_rtd_theme" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = "Mythrildoc" # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ( master_doc, "Mythril.tex", "Mythril Documentation", "ConsenSys Dilligence", "manual", ) ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "mythril", "Mythril Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( master_doc, "Mythril", "Mythril Documentation", author, "Mythril", "One line description of project.", "Miscellaneous", ) ] # -- Options for Epub output ------------------------------------------------- # Bibliographic Dublin Core info. epub_title = project # The unique identifier of the text. This can be a ISBN number # or the project homepage. # # epub_identifier = '' # A unique identification for the text. # # epub_uid = '' # A list of files that should not be packed into the epub file. epub_exclude_files = ["search.html"] # -- Extension configuration ------------------------------------------------- ================================================ FILE: docs/source/create-module.rst ================================================ Creating a Module ================= Create a module in the :code:`analysis/modules` directory, and create an instance of a class that inherits :code:`DetectionModule` named :code:`detector`. Take a look at the `suicide module `_ as an example. ================================================ FILE: docs/source/index.rst ================================================ Welcome to Mythril's documentation! =========================================== .. toctree:: :maxdepth: 1 :caption: Table of Contents: about installation tutorial security-analysis analysis-modules mythril Indices and Tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` ================================================ FILE: docs/source/installation.rst ================================================ Installation and Setup ====================== Mythril can be setup using different methods. ************** PyPI on Mac OS ************** .. code-block:: bash brew update brew upgrade brew tap ethereum/ethereum brew install solidity pip3 install mythril ************** PyPI on Ubuntu ************** .. code-block:: bash # Update sudo apt update # Install solc sudo apt install software-properties-common sudo add-apt-repository ppa:ethereum/ethereum sudo apt install solc # Install libssl-dev, python3-dev, and python3-pip sudo apt install libssl-dev python3-dev python3-pip # Install mythril pip3 install mythril myth version ****** Docker ****** All Mythril releases, starting from v0.18.3, are published to DockerHub as Docker images under the :code:`mythril/myth` name. After installing `Docker CE `_: .. code-block:: bash # Pull the latest release of mythril/myth $ docker pull mythril/myth Use :code:`docker run mythril/myth` the same way you would use the :code:`myth` command .. code-block:: bash docker run mythril/myth --help docker run mythril/myth disassemble -c "0x6060" To pass a file from your host machine to the dockerized Mythril, you must mount its containing folder to the container properly. For :code:`contract.sol` in the current working directory, do: .. code-block:: bash docker run -v $(pwd):/tmp mythril/myth analyze /tmp/contract.sol ================================================ FILE: docs/source/module-list.rst ================================================ Modules ======= *********************************** Delegate Call To Untrusted Contract *********************************** The `delegatecall module `_ detects `SWC-112 (DELEGATECALL to Untrusted Callee) `_. *********************************** Dependence on Predictable Variables *********************************** The `predictable variables module `_ detects `SWC-120 (Weak Randomness) `_ and `SWC-116 (Timestamp Dependence) `_. *********** Ether Thief *********** The `Ether Thief module `_ detects `SWC-105 (Unprotected Ether Withdrawal) `_. ********** Exceptions ********** The `exceptions module `_ detects `SWC-110 (Assert Violation) `_. ************** External Calls ************** The `external calls module `_ warns about `SWC-107 (Reentrancy) `_ by detecting calls to external contracts. ******* Integer ******* The `integer module `_ detects `SWC-101 (Integer Overflow and Underflow) `_. ************** Multiple Sends ************** The `multiple sends module `_ detects `SWC-113 (Denial of Service with Failed Call) `_ by checking for multiple calls or sends in a single transaction. ******* Suicide ******* The `suicide module `_ detects `SWC-106 (Unprotected SELFDESTRUCT) `_. **************************** State Change External Calls **************************** The `state change external calls module `_ detects `SWC-107 (Reentrancy) `_ by detecting state change after calls to an external contract. **************** Unchecked Retval **************** The `unchecked retval module `_ detects `SWC-104 (Unchecked Call Return Value) `_. ************************ User Supplied assertion ************************ The `user supplied assertion module `_ detects `SWC-110 (Assert Violation) `_ for user-supplied assertions. User supplied assertions should be log messages of the form: :code:`emit AssertionFailed(string)`. ************************ Arbitrary Storage Write ************************ The `arbitrary storage write module `_ detects `SWC-124 (Write to Arbitrary Storage Location) `_. **************** Arbitrary Jump **************** The `arbitrary jump module `_ detects `SWC-127 (Arbitrary Jump with Function Type Variable) `_. **************************** Transaction Order Dependence **************************** The `transaction order dependence module `_ detects `SWC-114 (Transaction Order Dependence) `_. **************************** Requirement Violation **************************** The `Requirement Violation module `_ detects `SWC-123 (Requirement Violation) `_. **************************** Unexpected Ether balance **************************** The `Unexpected Ether balance module `_ detects `SWC-132 (Unexpected Ether balance) `_. ================================================ FILE: docs/source/modules.rst ================================================ mythril ======= .. toctree:: :maxdepth: 4 mythril ================================================ FILE: docs/source/mythril.analysis.module.modules.rst ================================================ mythril.analysis.module.modules package ======================================= Submodules ---------- mythril.analysis.module.modules.arbitrary\_jump module ------------------------------------------------------ .. automodule:: mythril.analysis.module.modules.arbitrary_jump :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.arbitrary\_write module ------------------------------------------------------- .. automodule:: mythril.analysis.module.modules.arbitrary_write :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.delegatecall module --------------------------------------------------- .. automodule:: mythril.analysis.module.modules.delegatecall :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.dependence\_on\_origin module ------------------------------------------------------------- .. automodule:: mythril.analysis.module.modules.dependence_on_origin :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.dependence\_on\_predictable\_vars module ------------------------------------------------------------------------ .. automodule:: mythril.analysis.module.modules.dependence_on_predictable_vars :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.ether\_thief module --------------------------------------------------- .. automodule:: mythril.analysis.module.modules.ether_thief :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.exceptions module ------------------------------------------------- .. automodule:: mythril.analysis.module.modules.exceptions :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.external\_calls module ------------------------------------------------------ .. automodule:: mythril.analysis.module.modules.external_calls :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.integer module ---------------------------------------------- .. automodule:: mythril.analysis.module.modules.integer :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.multiple\_sends module ------------------------------------------------------ .. automodule:: mythril.analysis.module.modules.multiple_sends :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.state\_change\_external\_calls module --------------------------------------------------------------------- .. automodule:: mythril.analysis.module.modules.state_change_external_calls :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.suicide module ---------------------------------------------- .. automodule:: mythril.analysis.module.modules.suicide :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.unchecked\_retval module -------------------------------------------------------- .. automodule:: mythril.analysis.module.modules.unchecked_retval :members: :undoc-members: :show-inheritance: mythril.analysis.module.modules.user\_assertions module ------------------------------------------------------- .. automodule:: mythril.analysis.module.modules.user_assertions :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.analysis.module.modules :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.analysis.module.rst ================================================ mythril.analysis.module package =============================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.analysis.module.modules Submodules ---------- mythril.analysis.module.base module ----------------------------------- .. automodule:: mythril.analysis.module.base :members: :undoc-members: :show-inheritance: mythril.analysis.module.loader module ------------------------------------- .. automodule:: mythril.analysis.module.loader :members: :undoc-members: :show-inheritance: mythril.analysis.module.module\_helpers module ---------------------------------------------- .. automodule:: mythril.analysis.module.module_helpers :members: :undoc-members: :show-inheritance: mythril.analysis.module.util module ----------------------------------- .. automodule:: mythril.analysis.module.util :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.analysis.module :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.analysis.rst ================================================ mythril.analysis package ======================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.analysis.module Submodules ---------- mythril.analysis.analysis\_args module -------------------------------------- .. automodule:: mythril.analysis.analysis_args :members: :undoc-members: :show-inheritance: mythril.analysis.call\_helpers module ------------------------------------- .. automodule:: mythril.analysis.call_helpers :members: :undoc-members: :show-inheritance: mythril.analysis.callgraph module --------------------------------- .. automodule:: mythril.analysis.callgraph :members: :undoc-members: :show-inheritance: mythril.analysis.issue\_annotation module ----------------------------------------- .. automodule:: mythril.analysis.issue_annotation :members: :undoc-members: :show-inheritance: mythril.analysis.ops module --------------------------- .. automodule:: mythril.analysis.ops :members: :undoc-members: :show-inheritance: mythril.analysis.potential\_issues module ----------------------------------------- .. automodule:: mythril.analysis.potential_issues :members: :undoc-members: :show-inheritance: mythril.analysis.report module ------------------------------ .. automodule:: mythril.analysis.report :members: :undoc-members: :show-inheritance: mythril.analysis.security module -------------------------------- .. automodule:: mythril.analysis.security :members: :undoc-members: :show-inheritance: mythril.analysis.solver module ------------------------------ .. automodule:: mythril.analysis.solver :members: :undoc-members: :show-inheritance: mythril.analysis.swc\_data module --------------------------------- .. automodule:: mythril.analysis.swc_data :members: :undoc-members: :show-inheritance: mythril.analysis.symbolic module -------------------------------- .. automodule:: mythril.analysis.symbolic :members: :undoc-members: :show-inheritance: mythril.analysis.traceexplore module ------------------------------------ .. automodule:: mythril.analysis.traceexplore :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.analysis :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.concolic.rst ================================================ mythril.concolic package ======================== Submodules ---------- mythril.concolic.concolic\_execution module ------------------------------------------- .. automodule:: mythril.concolic.concolic_execution :members: :undoc-members: :show-inheritance: mythril.concolic.concrete\_data module -------------------------------------- .. automodule:: mythril.concolic.concrete_data :members: :undoc-members: :show-inheritance: mythril.concolic.find\_trace module ----------------------------------- .. automodule:: mythril.concolic.find_trace :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.concolic :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.disassembler.rst ================================================ mythril.disassembler package ============================ Submodules ---------- mythril.disassembler.asm module ------------------------------- .. automodule:: mythril.disassembler.asm :members: :undoc-members: :show-inheritance: mythril.disassembler.disassembly module --------------------------------------- .. automodule:: mythril.disassembler.disassembly :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.disassembler :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.ethereum.interface.rpc.rst ================================================ mythril.ethereum.interface.rpc package ====================================== Submodules ---------- mythril.ethereum.interface.rpc.base\_client module -------------------------------------------------- .. automodule:: mythril.ethereum.interface.rpc.base_client :members: :undoc-members: :show-inheritance: mythril.ethereum.interface.rpc.client module -------------------------------------------- .. automodule:: mythril.ethereum.interface.rpc.client :members: :undoc-members: :show-inheritance: mythril.ethereum.interface.rpc.constants module ----------------------------------------------- .. automodule:: mythril.ethereum.interface.rpc.constants :members: :undoc-members: :show-inheritance: mythril.ethereum.interface.rpc.exceptions module ------------------------------------------------ .. automodule:: mythril.ethereum.interface.rpc.exceptions :members: :undoc-members: :show-inheritance: mythril.ethereum.interface.rpc.utils module ------------------------------------------- .. automodule:: mythril.ethereum.interface.rpc.utils :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.ethereum.interface.rpc :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.ethereum.interface.rst ================================================ mythril.ethereum.interface package ================================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.ethereum.interface.rpc Module contents --------------- .. automodule:: mythril.ethereum.interface :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.ethereum.rst ================================================ mythril.ethereum package ======================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.ethereum.interface Submodules ---------- mythril.ethereum.evmcontract module ----------------------------------- .. automodule:: mythril.ethereum.evmcontract :members: :undoc-members: :show-inheritance: mythril.ethereum.util module ---------------------------- .. automodule:: mythril.ethereum.util :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.ethereum :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.interfaces.rst ================================================ mythril.interfaces package ========================== Submodules ---------- mythril.interfaces.cli module ----------------------------- .. automodule:: mythril.interfaces.cli :members: :undoc-members: :show-inheritance: mythril.interfaces.epic module ------------------------------ .. automodule:: mythril.interfaces.epic :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.interfaces :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.ethereum.function_managers.rst ================================================ mythril.laser.ethereum.function\_managers package ================================================= Submodules ---------- mythril.laser.ethereum.function\_managers.exponent\_function\_manager module ---------------------------------------------------------------------------- .. automodule:: mythril.laser.ethereum.function_managers.exponent_function_manager :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.function\_managers.keccak\_function\_manager module -------------------------------------------------------------------------- .. automodule:: mythril.laser.ethereum.function_managers.keccak_function_manager :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.ethereum.function_managers :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.ethereum.rst ================================================ mythril.laser.ethereum package ============================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.laser.ethereum.function_managers mythril.laser.ethereum.state mythril.laser.ethereum.strategy mythril.laser.ethereum.transaction Submodules ---------- mythril.laser.ethereum.call module ---------------------------------- .. automodule:: mythril.laser.ethereum.call :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.cfg module --------------------------------- .. automodule:: mythril.laser.ethereum.cfg :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.evm\_exceptions module --------------------------------------------- .. automodule:: mythril.laser.ethereum.evm_exceptions :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.instruction\_data module ----------------------------------------------- .. automodule:: mythril.laser.ethereum.instruction_data :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.instructions module ------------------------------------------ .. automodule:: mythril.laser.ethereum.instructions :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.natives module ------------------------------------- .. automodule:: mythril.laser.ethereum.natives :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.svm module --------------------------------- .. automodule:: mythril.laser.ethereum.svm :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.time\_handler module ------------------------------------------- .. automodule:: mythril.laser.ethereum.time_handler :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.util module ---------------------------------- .. automodule:: mythril.laser.ethereum.util :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.ethereum :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.ethereum.state.rst ================================================ mythril.laser.ethereum.state package ==================================== Submodules ---------- mythril.laser.ethereum.state.account module ------------------------------------------- .. automodule:: mythril.laser.ethereum.state.account :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.annotation module ---------------------------------------------- .. automodule:: mythril.laser.ethereum.state.annotation :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.calldata module -------------------------------------------- .. automodule:: mythril.laser.ethereum.state.calldata :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.constraints module ----------------------------------------------- .. automodule:: mythril.laser.ethereum.state.constraints :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.environment module ----------------------------------------------- .. automodule:: mythril.laser.ethereum.state.environment :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.global\_state module ------------------------------------------------- .. automodule:: mythril.laser.ethereum.state.global_state :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.machine\_state module -------------------------------------------------- .. automodule:: mythril.laser.ethereum.state.machine_state :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.memory module ------------------------------------------ .. automodule:: mythril.laser.ethereum.state.memory :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.return\_data module ------------------------------------------------ .. automodule:: mythril.laser.ethereum.state.return_data :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.state.world\_state module ------------------------------------------------ .. automodule:: mythril.laser.ethereum.state.world_state :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.ethereum.state :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.ethereum.strategy.extensions.rst ================================================ mythril.laser.ethereum.strategy.extensions package ================================================== Submodules ---------- mythril.laser.ethereum.strategy.extensions.bounded\_loops module ---------------------------------------------------------------- .. automodule:: mythril.laser.ethereum.strategy.extensions.bounded_loops :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.ethereum.strategy.extensions :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.ethereum.strategy.rst ================================================ mythril.laser.ethereum.strategy package ======================================= Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.laser.ethereum.strategy.extensions Submodules ---------- mythril.laser.ethereum.strategy.basic module -------------------------------------------- .. automodule:: mythril.laser.ethereum.strategy.basic :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.strategy.beam module ------------------------------------------- .. automodule:: mythril.laser.ethereum.strategy.beam :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.strategy.concolic module ----------------------------------------------- .. automodule:: mythril.laser.ethereum.strategy.concolic :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.ethereum.strategy :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.ethereum.transaction.rst ================================================ mythril.laser.ethereum.transaction package ========================================== Submodules ---------- mythril.laser.ethereum.transaction.concolic module -------------------------------------------------- .. automodule:: mythril.laser.ethereum.transaction.concolic :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.transaction.symbolic module -------------------------------------------------- .. automodule:: mythril.laser.ethereum.transaction.symbolic :members: :undoc-members: :show-inheritance: mythril.laser.ethereum.transaction.transaction\_models module ------------------------------------------------------------- .. automodule:: mythril.laser.ethereum.transaction.transaction_models :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.ethereum.transaction :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.plugin.plugins.coverage.rst ================================================ mythril.laser.plugin.plugins.coverage package ============================================= Submodules ---------- mythril.laser.plugin.plugins.coverage.coverage\_plugin module ------------------------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.coverage.coverage_plugin :members: :undoc-members: :show-inheritance: mythril.laser.plugin.plugins.coverage.coverage\_strategy module --------------------------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.coverage.coverage_strategy :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.plugin.plugins.coverage :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.plugin.plugins.rst ================================================ mythril.laser.plugin.plugins package ==================================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.laser.plugin.plugins.coverage mythril.laser.plugin.plugins.summary_backup Submodules ---------- mythril.laser.plugin.plugins.benchmark module --------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.benchmark :members: :undoc-members: :show-inheritance: mythril.laser.plugin.plugins.call\_depth\_limiter module -------------------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.call_depth_limiter :members: :undoc-members: :show-inheritance: mythril.laser.plugin.plugins.dependency\_pruner module ------------------------------------------------------ .. automodule:: mythril.laser.plugin.plugins.dependency_pruner :members: :undoc-members: :show-inheritance: mythril.laser.plugin.plugins.instruction\_profiler module --------------------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.instruction_profiler :members: :undoc-members: :show-inheritance: mythril.laser.plugin.plugins.mutation\_pruner module ---------------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.mutation_pruner :members: :undoc-members: :show-inheritance: mythril.laser.plugin.plugins.plugin\_annotations module ------------------------------------------------------- .. automodule:: mythril.laser.plugin.plugins.plugin_annotations :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.plugin.plugins :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.plugin.plugins.summary_backup.rst ================================================ mythril.laser.plugin.plugins.summary\_backup package ==================================================== Module contents --------------- .. automodule:: mythril.laser.plugin.plugins.summary_backup :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.plugin.rst ================================================ mythril.laser.plugin package ============================ Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.laser.plugin.plugins Submodules ---------- mythril.laser.plugin.builder module ----------------------------------- .. automodule:: mythril.laser.plugin.builder :members: :undoc-members: :show-inheritance: mythril.laser.plugin.interface module ------------------------------------- .. automodule:: mythril.laser.plugin.interface :members: :undoc-members: :show-inheritance: mythril.laser.plugin.loader module ---------------------------------- .. automodule:: mythril.laser.plugin.loader :members: :undoc-members: :show-inheritance: mythril.laser.plugin.signals module ----------------------------------- .. automodule:: mythril.laser.plugin.signals :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.plugin :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.rst ================================================ mythril.laser package ===================== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.laser.ethereum mythril.laser.plugin mythril.laser.smt Submodules ---------- mythril.laser.execution\_info module ------------------------------------ .. automodule:: mythril.laser.execution_info :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.smt.rst ================================================ mythril.laser.smt package ========================= Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.laser.smt.solver Submodules ---------- mythril.laser.smt.array module ------------------------------ .. automodule:: mythril.laser.smt.array :members: :undoc-members: :show-inheritance: mythril.laser.smt.bitvec module ------------------------------- .. automodule:: mythril.laser.smt.bitvec :members: :undoc-members: :show-inheritance: mythril.laser.smt.bitvec\_helper module --------------------------------------- .. automodule:: mythril.laser.smt.bitvec_helper :members: :undoc-members: :show-inheritance: mythril.laser.smt.bool module ----------------------------- .. automodule:: mythril.laser.smt.bool :members: :undoc-members: :show-inheritance: mythril.laser.smt.expression module ----------------------------------- .. automodule:: mythril.laser.smt.expression :members: :undoc-members: :show-inheritance: mythril.laser.smt.function module --------------------------------- .. automodule:: mythril.laser.smt.function :members: :undoc-members: :show-inheritance: mythril.laser.smt.model module ------------------------------ .. automodule:: mythril.laser.smt.model :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.smt :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.laser.smt.solver.rst ================================================ mythril.laser.smt.solver package ================================ Submodules ---------- mythril.laser.smt.solver.independence\_solver module ---------------------------------------------------- .. automodule:: mythril.laser.smt.solver.independence_solver :members: :undoc-members: :show-inheritance: mythril.laser.smt.solver.solver module -------------------------------------- .. automodule:: mythril.laser.smt.solver.solver :members: :undoc-members: :show-inheritance: mythril.laser.smt.solver.solver\_statistics module -------------------------------------------------- .. automodule:: mythril.laser.smt.solver.solver_statistics :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.laser.smt.solver :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.mythril.rst ================================================ mythril.mythril package ======================= Submodules ---------- mythril.mythril.mythril\_analyzer module ---------------------------------------- .. automodule:: mythril.mythril.mythril_analyzer :members: :undoc-members: :show-inheritance: mythril.mythril.mythril\_config module -------------------------------------- .. automodule:: mythril.mythril.mythril_config :members: :undoc-members: :show-inheritance: mythril.mythril.mythril\_disassembler module -------------------------------------------- .. automodule:: mythril.mythril.mythril_disassembler :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.mythril :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.plugin.rst ================================================ mythril.plugin package ====================== Submodules ---------- mythril.plugin.discovery module ------------------------------- .. automodule:: mythril.plugin.discovery :members: :undoc-members: :show-inheritance: mythril.plugin.interface module ------------------------------- .. automodule:: mythril.plugin.interface :members: :undoc-members: :show-inheritance: mythril.plugin.loader module ---------------------------- .. automodule:: mythril.plugin.loader :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.plugin :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.rst ================================================ mythril package =============== Subpackages ----------- .. toctree:: :maxdepth: 4 mythril.analysis mythril.concolic mythril.disassembler mythril.ethereum mythril.interfaces mythril.laser mythril.mythril mythril.plugin mythril.solidity mythril.support Submodules ---------- mythril.exceptions module ------------------------- .. automodule:: mythril.exceptions :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.solidity.rst ================================================ mythril.solidity package ======================== Submodules ---------- mythril.solidity.soliditycontract module ---------------------------------------- .. automodule:: mythril.solidity.soliditycontract :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.solidity :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/mythril.support.rst ================================================ mythril.support package ======================= Submodules ---------- mythril.support.loader module ----------------------------- .. automodule:: mythril.support.loader :members: :undoc-members: :show-inheritance: mythril.support.lock module --------------------------- .. automodule:: mythril.support.lock :members: :undoc-members: :show-inheritance: mythril.support.model module ---------------------------- .. automodule:: mythril.support.model :members: :undoc-members: :show-inheritance: mythril.support.opcodes module ------------------------------ .. automodule:: mythril.support.opcodes :members: :undoc-members: :show-inheritance: mythril.support.signatures module --------------------------------- .. automodule:: mythril.support.signatures :members: :undoc-members: :show-inheritance: mythril.support.source\_support module -------------------------------------- .. automodule:: mythril.support.source_support :members: :undoc-members: :show-inheritance: mythril.support.start\_time module ---------------------------------- .. automodule:: mythril.support.start_time :members: :undoc-members: :show-inheritance: mythril.support.support\_args module ------------------------------------ .. automodule:: mythril.support.support_args :members: :undoc-members: :show-inheritance: mythril.support.support\_utils module ------------------------------------- .. automodule:: mythril.support.support_utils :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: mythril.support :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/source/security-analysis.rst ================================================ Security Analysis ================= Running :code:`myth analyze` with one of the input options described below will run the analysis modules in the `/analysis/modules `_ directory. *********************** Analyzing Solidity Code *********************** In order to work with Solidity source code files, the `solc command line compiler `_ needs to be installed and in PATH. You can then provide the source file(s) as positional arguments. .. code-block:: bash $ myth analyze ether_send.sol ==== Unprotected Ether Withdrawal ==== SWC ID: 105 Severity: High Contract: Crowdfunding Function name: withdrawfunds() PC address: 730 Estimated Gas Usage: 1132 - 1743 Anyone can withdraw ETH from the contract account. Arbitrary senders other than the contract creator can withdraw ETH from the contract account without previously having sent an equivalent amount of ETH to it. This is likely to be a vulnerability. -------------------- In file: tests/testdata/input_contracts/ether_send.sol:21 msg.sender.transfer(address(this).balance) -------------------- If an input file contains multiple contract definitions, Mythril analyzes the *last* bytecode output produced by solc. You can override this by specifying the contract name explicitly: .. code-block:: bash myth analyze OmiseGo.sol:OMGToken Specifying Solc Versions ######################## You can specify a version of the solidity compiler to be used with :code:`--solv `. Please be aware that this uses `py-solc `_ and will only work on Linux and macOS. It will check the version of solc in your path, and if this is not what is specified, it will download binaries on Linux or try to compile from source on macOS. Output Formats ############## By default, analysis results are printed to the terminal in text format. You can change the output format with the :code:`-o` argument: .. code-block:: bash myth analyze underflow.sol -o jsonv2 Available formats are :code:`text`, :code:`markdown`, :code:`json`, and :code:`jsonv2`. For integration with other tools, :code:`jsonv2` is generally preferred over :code:`json` because it is consistent with other `MythX `_ tools. **************************** Analyzing On-Chain Contracts **************************** When analyzing contracts on the blockchain, Mythril will by default attempt to query INFURA. You can use the built-in INFURA support or manually configure the RPC settings with the :code:`--rpc` argument. +-------------------------------------------------+-------------------------------------------------+ | :code:`--rpc ganache` | Connect to local Ganache | +-------------------------------------------------+-------------------------------------------------+ | :code:`--rpc infura-[netname] --infura-id ` | Connect to mainnet, rinkeby, kovan, or ropsten. | +-------------------------------------------------+-------------------------------------------------+ | :code:`--rpc host:port` | Connect to custom rpc | +-------------------------------------------------+-------------------------------------------------+ | :code:`--rpctls ` | RPC connection over TLS (default: False) | +-------------------------------------------------+-------------------------------------------------+ To specify a contract address, use :code:`-a
` Analyze mainnet contract via INFURA: .. code-block:: bash myth analyze -a 0x5c436ff914c458983414019195e0f4ecbef9e6dd --infura-id You can also use the environment variable `INFURA_ID` instead of the cmd line argument or set it in ~/.mythril/config.ini. .. code-block:: bash myth -v4 analyze -a 0xEbFD99838cb0c132016B9E117563CB41f2B02264 --infura-id ****************** Speed vs. Coverage ****************** The execution timeout can be specified with the :code:`--execution-timeout ` argument. When the timeout is reached, mythril will stop analysis and print out all currently found issues. The maximum recursion depth for the symbolic execution engine can be controlled with the :code:`--max-depth` argument. The default value is 22. Lowering this value will decrease the number of explored states and analysis time, while increasing this number will increase the number of explored states and increase analysis time. For some contracts, it helps to fine tune this number to get the best analysis results. - ================================================ FILE: docs/source/tutorial.rst ================================================ Tutorial ====================== ****************************************** Introduction ****************************************** Mythril is a popular security analysis tool for smart contracts. It is an open-source tool that can analyze Ethereum smart contracts and report potential security vulnerabilities in them. By analyzing the bytecode of a smart contract, Mythril can identify and report on possible security vulnerabilities, such as reentrancy attacks, integer overflows, and other common smart contract vulnerabilities. This tutorial explains how to use Mythril to analyze simple Solidity contracts for security vulnerabilities. A simple contract is one that does not have any imports. ****************************************** Executing Mythril on Simple Contracts ****************************************** To start, we consider this simple contract, ``Exceptions``, which has a number of functions, including ``assert1()``, ``assert2()``, and ``assert3()``, that contain Solidity ``assert()`` statements. We will use Mythril to analyze this contract and report any potential vulnerabilities. .. code-block:: solidity contract Exceptions { uint256[8] myarray; uint counter = 0; function assert1() public pure { uint256 i = 1; assert(i == 0); } function counter_increase() public { counter+=1; } function assert5(uint input_x) public view{ require(counter>2); assert(input_x > 10); } function assert2() public pure { uint256 i = 1; assert(i > 0); } function assert3(uint256 input) public pure { assert(input != 23); } function require_is_fine(uint256 input) public pure { require(input != 23); } function this_is_fine(uint256 input) public pure { if (input > 0) { uint256 i = 1/input; } } function this_is_find_2(uint256 index) public view { if (index < 8) { uint256 i = myarray[index]; } } } The sample contract has several functions, some of which contain vulnerabilities. For instance, the ``assert1()`` function contains an assertion violation. To analyze the contract using Mythril, the following command can be used: .. code-block:: bash $ myth analyze The output will show the vulnerabilities in the contract. In the case of the "Exceptions" contract, Mythril detected two instances of assertion violations. .. code-block:: none ==== Exception State ==== SWC ID: 110 Severity: Medium Contract: Exceptions Function name: assert1() PC address: 708 Estimated Gas Usage: 207 - 492 An assertion violation was triggered. It is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values). -------------------- In file: solidity_examples/exceptions.sol:7 assert(i == 0) -------------------- Initial State: Account: [CREATOR], balance: 0x2, nonce:0, storage:{} Account: [ATTACKER], balance: 0x0, nonce:0, storage:{} Transaction Sequence: Caller: [CREATOR], calldata: , value: 0x0 Caller: [ATTACKER], function: assert1(), txdata: 0xb34c3610, value: 0x0 ==== Exception State ==== SWC ID: 110 Severity: Medium Contract: Exceptions Function name: assert3(uint256) PC address: 708 Estimated Gas Usage: 482 - 767 An assertion violation was triggered. It is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values). -------------------- In file: solidity_examples/exceptions.sol:20 assert(input != 23) -------------------- Initial State: Account: [CREATOR], balance: 0x40207f9b0, nonce:0, storage:{} Account: [ATTACKER], balance: 0x0, nonce:0, storage:{} Transaction Sequence: Caller: [CREATOR], calldata: , value: 0x0 Caller: [SOMEGUY], function: assert3(uint256), txdata: 0x546455b50000000000000000000000000000000000000000000000000000000000000017, value: 0x0 One of the functions, ``assert5(uint256)``, should also have an assertion failure, but it is not detected because Mythril's default configuration is to run three transactions. To detect this vulnerability, the transaction count can be increased to four using the ``-t`` option, as shown below: .. code-block:: bash $ myth analyze -t 4 This gives the following execution output: .. code-block:: none ==== Exception State ==== SWC ID: 110 Severity: Medium Contract: Exceptions Function name: assert1() PC address: 731 Estimated Gas Usage: 207 - 492 An assertion violation was triggered. It is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values). -------------------- In file: solidity_examples/exceptions.sol:7 assert(i == 0) -------------------- Initial State: Account: [CREATOR], balance: 0x2, nonce:0, storage:{} Account: [ATTACKER], balance: 0x0, nonce:0, storage:{} Transaction Sequence: Caller: [CREATOR], calldata: , value: 0x0 Caller: [ATTACKER], function: assert1(), txdata: 0xb34c3610, value: 0x0 ==== Exception State ==== SWC ID: 110 Severity: Medium Contract: Exceptions Function name: assert3(uint256) PC address: 731 Estimated Gas Usage: 504 - 789 An assertion violation was triggered. It is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values). -------------------- In file: solidity_examples/exceptions.sol:22 assert(input != 23) -------------------- Initial State: Account: [CREATOR], balance: 0x3, nonce:0, storage:{} Account: [ATTACKER], balance: 0x0, nonce:0, storage:{} Transaction Sequence: Caller: [CREATOR], calldata: , value: 0x0 Caller: [ATTACKER], function: assert3(uint256), txdata: 0x546455b50000000000000000000000000000000000000000000000000000000000000017, value: 0x0 ==== Exception State ==== SWC ID: 110 Severity: Medium Contract: Exceptions Function name: assert5(uint256) PC address: 731 Estimated Gas Usage: 1302 - 1587 An assertion violation was triggered. It is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values). -------------------- In file: solidity_examples/exceptions.sol:14 assert(input_x > 10) -------------------- Initial State: Account: [CREATOR], balance: 0x20000000, nonce:0, storage:{} Account: [ATTACKER], balance: 0x1000000, nonce:0, storage:{} Transaction Sequence: Caller: [CREATOR], calldata: , value: 0x0 Caller: [ATTACKER], function: counter_increase(), txdata: 0xe47b0253, value: 0x0 Caller: [CREATOR], function: counter_increase(), txdata: 0xe47b0253, value: 0x0 Caller: [CREATOR], function: counter_increase(), txdata: 0xe47b0253, value: 0x0 Caller: [ATTACKER], function: assert5(uint256), txdata: 0x1d5d53dd0000000000000000000000000000000000000000000000000000000000000003, value: 0x0 For the violation in the 4th transaction, the input value should be less than 10. The transaction data generated by Mythril for the 4th transaction is ``0x1d5d53dd0000000000000000000000000000000000000000000000000000000000000003``, the first 4 bytes ``1d5d53dd`` correspond to the function signature hence the input generated by Mythril is ``0000000000000000000000000000000000000000000000000000000000000003`` in hex, which is 3. For automated resolution of the input try using a different output format such as JSON. .. code-block:: bash $ myth analyze -o json This leads to the following output: .. code-block:: json { "error": null, "issues": [{ "address": 731, "code": "assert(i == 0)", "contract": "Exceptions", "description": "An assertion violation was triggered.\nIt is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values).", "filename": "solidity_examples/exceptions.sol", "function": "assert1()", "lineno": 7, "max_gas_used": 492, "min_gas_used": 207, "severity": "Medium", "sourceMap": ":::i", "swc-id": "110", "title": "Exception State", "tx_sequence": { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x2", "code": "", "nonce": 0, "storage": "{}" }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": "{}" } } }, "steps": [{ "address": "", "calldata": "", "input": "0x6080604052600060085534801561001557600080fd5b506103f7806100256000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063b34c36101161005b578063b34c3610146100fd578063b630d70614610107578063e47b025314610123578063f44f13d81461012d57610088565b806301d4277c1461008d5780631d5d53dd146100a9578063546455b5146100c557806378375f14146100e1575b600080fd5b6100a760048036038101906100a29190610251565b610137565b005b6100c360048036038101906100be9190610251565b61015e565b005b6100df60048036038101906100da9190610251565b610181565b005b6100fb60048036038101906100f69190610251565b610196565b005b6101056101a7565b005b610121600480360381019061011c9190610251565b6101c1565b005b61012b6101e0565b005b6101356101fc565b005b600881101561015b5760008082600881106101555761015461027e565b5b01549050505b50565b60026008541161016d57600080fd5b600a811161017e5761017d6102ad565b5b50565b6017811415610193576101926102ad565b5b50565b60178114156101a457600080fd5b50565b600060019050600081146101be576101bd6102ad565b5b50565b60008111156101dd5760008160016101d9919061033a565b9050505b50565b6001600860008282546101f3919061036b565b92505081905550565b60006001905060008111610213576102126102ad565b5b50565b600080fd5b6000819050919050565b61022e8161021b565b811461023957600080fd5b50565b60008135905061024b81610225565b92915050565b60006020828403121561026757610266610216565b5b60006102758482850161023c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006103458261021b565b91506103508361021b565b9250826103605761035f6102dc565b5b828204905092915050565b60006103768261021b565b91506103818361021b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103b6576103b561030b565b5b82820190509291505056fea2646970667358221220b474c01fa60d997027e1ceb779bcb2b34b6752282e0ea3a038a08b889fe0163f64736f6c634300080c0033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "calldata": "0xb34c3610", "input": "0xb34c3610", "name": "assert1()", "origin": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "resolved_input": null, "value": "0x0" }] } }, { "address": 731, "code": "assert(input != 23)", "contract": "Exceptions", "description": "An assertion violation was triggered.\nIt is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values).", "filename": "solidity_examples/exceptions.sol", "function": "assert3(uint256)", "lineno": 22, "max_gas_used": 789, "min_gas_used": 504, "severity": "Medium", "sourceMap": ":::i", "swc-id": "110", "title": "Exception State", "tx_sequence": { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x3", "code": "", "nonce": 0, "storage": "{}" }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": "{}" } } }, "steps": [{ "address": "", "calldata": "", "input": "0x6080604052600060085534801561001557600080fd5b506103f7806100256000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063b34c36101161005b578063b34c3610146100fd578063b630d70614610107578063e47b025314610123578063f44f13d81461012d57610088565b806301d4277c1461008d5780631d5d53dd146100a9578063546455b5146100c557806378375f14146100e1575b600080fd5b6100a760048036038101906100a29190610251565b610137565b005b6100c360048036038101906100be9190610251565b61015e565b005b6100df60048036038101906100da9190610251565b610181565b005b6100fb60048036038101906100f69190610251565b610196565b005b6101056101a7565b005b610121600480360381019061011c9190610251565b6101c1565b005b61012b6101e0565b005b6101356101fc565b005b600881101561015b5760008082600881106101555761015461027e565b5b01549050505b50565b60026008541161016d57600080fd5b600a811161017e5761017d6102ad565b5b50565b6017811415610193576101926102ad565b5b50565b60178114156101a457600080fd5b50565b600060019050600081146101be576101bd6102ad565b5b50565b60008111156101dd5760008160016101d9919061033a565b9050505b50565b6001600860008282546101f3919061036b565b92505081905550565b60006001905060008111610213576102126102ad565b5b50565b600080fd5b6000819050919050565b61022e8161021b565b811461023957600080fd5b50565b60008135905061024b81610225565b92915050565b60006020828403121561026757610266610216565b5b60006102758482850161023c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006103458261021b565b91506103508361021b565b9250826103605761035f6102dc565b5b828204905092915050565b60006103768261021b565b91506103818361021b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103b6576103b561030b565b5b82820190509291505056fea2646970667358221220b474c01fa60d997027e1ceb779bcb2b34b6752282e0ea3a038a08b889fe0163f64736f6c634300080c0033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "calldata": "0x546455b50000000000000000000000000000000000000000000000000000000000000017", "input": "0x546455b50000000000000000000000000000000000000000000000000000000000000017", "name": "assert3(uint256)", "origin": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "resolved_input": [23], "value": "0x0" }] } }, { "address": 731, "code": "assert(input_x > 10)", "contract": "Exceptions", "description": "An assertion violation was triggered.\nIt is possible to trigger an assertion violation. Note that Solidity assert() statements should only be used to check invariants. Review the transaction trace generated for this issue and either make sure your program logic is correct, or use require() instead of assert() if your goal is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers (for instance, via passed arguments) and callees (for instance, via return values).", "filename": "solidity_examples/exceptions.sol", "function": "assert5(uint256)", "lineno": 14, "max_gas_used": 1587, "min_gas_used": 1302, "severity": "Medium", "sourceMap": ":::i", "swc-id": "110", "title": "Exception State", "tx_sequence": { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x0", "code": "", "nonce": 0, "storage": "{}" }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": "{}" } } }, "steps": [{ "address": "", "calldata": "", "input": "0x6080604052600060085534801561001557600080fd5b506103f7806100256000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063b34c36101161005b578063b34c3610146100fd578063b630d70614610107578063e47b025314610123578063f44f13d81461012d57610088565b806301d4277c1461008d5780631d5d53dd146100a9578063546455b5146100c557806378375f14146100e1575b600080fd5b6100a760048036038101906100a29190610251565b610137565b005b6100c360048036038101906100be9190610251565b61015e565b005b6100df60048036038101906100da9190610251565b610181565b005b6100fb60048036038101906100f69190610251565b610196565b005b6101056101a7565b005b610121600480360381019061011c9190610251565b6101c1565b005b61012b6101e0565b005b6101356101fc565b005b600881101561015b5760008082600881106101555761015461027e565b5b01549050505b50565b60026008541161016d57600080fd5b600a811161017e5761017d6102ad565b5b50565b6017811415610193576101926102ad565b5b50565b60178114156101a457600080fd5b50565b600060019050600081146101be576101bd6102ad565b5b50565b60008111156101dd5760008160016101d9919061033a565b9050505b50565b6001600860008282546101f3919061036b565b92505081905550565b60006001905060008111610213576102126102ad565b5b50565b600080fd5b6000819050919050565b61022e8161021b565b811461023957600080fd5b50565b60008135905061024b81610225565b92915050565b60006020828403121561026757610266610216565b5b60006102758482850161023c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006103458261021b565b91506103508361021b565b9250826103605761035f6102dc565b5b828204905092915050565b60006103768261021b565b91506103818361021b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103b6576103b561030b565b5b82820190509291505056fea2646970667358221220b474c01fa60d997027e1ceb779bcb2b34b6752282e0ea3a038a08b889fe0163f64736f6c634300080c0033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "calldata": "0xe47b0253", "input": "0xe47b0253", "name": "counter_increase()", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "resolved_input": null, "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "calldata": "0xe47b0253", "input": "0xe47b0253", "name": "counter_increase()", "origin": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "resolved_input": null, "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "calldata": "0xe47b0253", "input": "0xe47b0253", "name": "counter_increase()", "origin": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "resolved_input": null, "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "calldata": "0x1d5d53dd0000000000000000000000000000000000000000000000000000000000000003", "input": "0x1d5d53dd0000000000000000000000000000000000000000000000000000000000000003", "name": "assert5(uint256)", "origin": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "resolved_input": [3], "value": "0x0" }] } }], "success": true } We can observe that the "resolved_input" field for the final transaction resolves to ``[3]``. Although this resolution fails in some circumstances where output generated by Mythril is although executable on the bytecode, it cannot be decoded due to not being a valid ABI. There are interesting options such as ``--execution-timeout `` and ``--solver-timeout `` which can be increased for better results. The default execution-timeout and solver-timeout are 86400 seconds and 25000 milliseconds respectively. ******************************************************** Executing Mythril on Contracts with Imports ******************************************************** When using Mythril to analyze a Solidity contract, you may encounter issues related to import statements. Solidity does not have access to the import locations, which can result in errors when compiling the program. In order to provide import information to Solidity, you can use the remappings option in Mythril. Consider the following Solidity contract, which imports the PRC20 contract from the ``@openzeppelin/contracts/token/PRC20/PRC20.sol`` file: .. code-block:: solidity import "@openzeppelin/contracts/token/PRC20/PRC20.sol"; contract Nothing is PRC20{ string x_0 = ""; bytes3 x_1 = "A"; bytes5 x_2 = "E"; bytes5 x_3 = ""; bytes3 x_4 = "I"; bytes3 x_5 = "U"; bytes3 x_6 = "O"; bytes3 x_7 = "0"; bytes3 x_8 = "U"; bytes3 x_9 = "U"; function stringCompare(string memory a, string memory b) internal pure returns (bool) { if(bytes(a).length != bytes(b).length) { return false; } else { return keccak256(bytes(a)) == keccak256(bytes(b)); } } function nothing(string memory g_0, bytes3 g_5, bytes3 g_6, bytes3 g_7, bytes3 g_8, bytes3 g_9, bytes3 g_10, bytes3 g_11) public view returns (bool){ if (!stringCompare(g_0, x_0)) return false; if (g_5 != x_5) return false; if (g_6 != x_6) return false; if (g_7 != x_7) return false; if (g_8 != x_8) return false; if (g_9 != x_9) return false; if (g_10 != x_9) return false; if (g_11 != x_9) return false; return true; } } When this contract is directly executed by using the following command: .. code-block:: bash $ myth analyze We encounter the following error: .. code-block:: none mythril.interfaces.cli [ERROR]: Solc experienced a fatal error. ParserError: Source "@openzeppelin/contracts/token/PRC20/PRC20.sol" not found: File not found. Searched the following locations: "". --> :1:1: | 1 | import "@openzeppelin/contracts/token/PRC20/PRC20.sol"; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This error occurs because Solidity cannot locate the ``PRC20.sol`` file. To solve this issue, you need to provide remapping information to Mythril, which will relay it to the Solidity compiler. Remapping involves mapping an import statement to the path that contains the corresponding file. In this example, we can map the import statement ``@openzeppelin/contracts/token/PRC20/`` to the path that contains ``PRC20.sol``. Let's assume that the file is located at ``node_modules/PRC20/PRC20.sol``. We can provide the remapping information to Mythril in a JSON file like this: .. code-block:: json { "remappings": [ "@openzeppelin/contracts/token/PRC20/=node_modules/PRC20/"] } This JSON file maps the prefix ``@openzeppelin/contracts/token/PRC20/`` to the path ``node_modules/PRC20/`` in the file system. When you run Mythril, you can use the ``--solc-json`` option to provide the remapping file: .. code-block:: bash $ myth analyze {file_path} --solc-json {json_file_path} With this command, Mythril will be able to locate the ``PRC20.sol`` file, and the analysis should proceed without errors. For more information on remappings, you can refer to the `Solidity documentation `_. ******************************************************** Executing Mythril by Restricting Transaction Sequences ******************************************************** Mythril is a security analysis tool that can be used to search certain transaction sequences. The `--transaction-sequences` argument can be used to direct the search. You should provide a list of transactions that are sequenced in the same order that they will be executed in the contract. For example, suppose you want to find vulnerabilities in a contract that executes three transactions, where the first transaction is constrained with ``func_hash1`` and ``func_hash2``, the second transaction is constrained with ``func_hash2`` and ``func_hash3``, and the final transaction is unconstrained on any function. You would provide ``--transaction-sequences [[func_hash1,func_hash2], [func_hash2,func_hash3],[]]`` as an argument to Mythril. You can use ``-1`` as a proxy for the hash of the `fallback()` function and ``-2`` as a proxy for the hash of the ``receive()`` function. Here is an example contract that demonstrates how to use Mythril with ``--transaction-sequences``. Consider the following contract: .. code-block:: solidity pragma solidity ^0.5.0; contract Rubixi { //Declare variables for storage critical to contract uint private balance = 0; uint private collectedFees = 0; uint private feePercent = 10; uint private pyramidMultiplier = 300; uint private payoutOrder = 0; address payable private creator; modifier onlyowner { if (msg.sender == creator) _; } struct Participant { address payable etherAddress; uint payout; } //Fallback function function() external payable { init(); } //Sets creator function dynamicPyramid() public { creator = msg.sender; } Participant[] private participants; //Fee functions for creator function collectAllFees() public onlyowner { require(collectedFees > 0); creator.transfer(collectedFees); collectedFees = 0; } function collectFeesInEther(uint _amt) public onlyowner { _amt *= 1 ether; if (_amt > collectedFees) collectAllFees(); require(collectedFees > 0); creator.transfer(_amt); collectedFees -= _amt; } function collectPercentOfFees(uint _pcent) public onlyowner { require(collectedFees > 0 && _pcent <= 100); uint feesToCollect = collectedFees / 100 * _pcent; creator.transfer(feesToCollect); collectedFees -= feesToCollect; } //Functions for changing variables related to the contract function changeOwner(address payable _owner) public onlyowner { creator = _owner; } function changeMultiplier(uint _mult) public onlyowner { require(_mult <= 300 && _mult >= 120); pyramidMultiplier = _mult; } function changeFeePercentage(uint _fee) public onlyowner { require(_fee <= 10); feePercent = _fee; } //Functions to provide information to end-user using JSON interface or other interfaces function currentMultiplier() public view returns (uint multiplier, string memory info) { multiplier = pyramidMultiplier; info = "This multiplier applies to you as soon as transaction is received, may be lowered to hasten payouts or increased if payouts are fast enough. Due to no float or decimals, multiplier is x100 for a fractional multiplier e.g. 250 is actually a 2.5x multiplier. Capped at 3x max and 1.2x min."; } function currentFeePercentage() public view returns (uint fee, string memory info) { fee = feePercent; info = "Shown in % form. Fee is halved(50%) for amounts equal or greater than 50 ethers. (Fee may change, but is capped to a maximum of 10%)"; } function currentPyramidBalanceApproximately() public view returns (uint pyramidBalance, string memory info) { pyramidBalance = balance / 1 ether; info = "All balance values are measured in Ethers, note that due to no decimal placing, these values show up as integers only, within the contract itself you will get the exact decimal value you are supposed to"; } function nextPayoutWhenPyramidBalanceTotalsApproximately() public view returns (uint balancePayout) { balancePayout = participants[payoutOrder].payout / 1 ether; } function feesSeperateFromBalanceApproximately() public view returns (uint fees) { fees = collectedFees / 1 ether; } function totalParticipants() public view returns (uint count) { count = participants.length; } function numberOfParticipantsWaitingForPayout() public view returns (uint count) { count = participants.length - payoutOrder; } function participantDetails(uint orderInPyramid) public view returns (address addr, uint payout) { if (orderInPyramid <= participants.length) { addr = participants[orderInPyramid].etherAddress; payout = participants[orderInPyramid].payout / 1 ether; } } //init function run on fallback function init() private { //Ensures only tx with value of 1 ether or greater are processed and added to pyramid if (msg.value < 1 ether) { collectedFees += msg.value; return; } uint _fee = feePercent; // 50% fee rebate on any ether value of 50 or greater if (msg.value >= 50 ether) _fee /= 2; addPayout(_fee); } //Function called for valid tx to the contract function addPayout(uint _fee) private { //Adds new address to participant array participants.push(Participant(msg.sender, (msg.value * pyramidMultiplier) / 100)); // These statements ensure a quicker payout system to // later pyramid entrants, so the pyramid has a longer lifespan if (participants.length == 10) pyramidMultiplier = 200; else if (participants.length == 25) pyramidMultiplier = 150; // collect fees and update contract balance balance += (msg.value * (100 - _fee)) / 100; collectedFees += (msg.value * _fee) / 100; //Pays earlier participiants if balance sufficient while (balance > participants[payoutOrder].payout) { uint payoutToSend = participants[payoutOrder].payout; participants[payoutOrder].etherAddress.transfer(payoutToSend); balance -= participants[payoutOrder].payout; payoutOrder += 1; } } } Since this contract has ``16`` functions, it is infeasible to execute uninteresting functions such as ``feesSeperateFromBalanceApproximately()``. To successfully explore useful transaction sequences we can use Mythril's ``--transaction-sequences`` argument. .. code-block:: bash $ myth analyze rubixi.sol -t 3 --transaction-sequences [["0x89b8ae9b"],[-1],["0x686f2c90","0xb4022950","0x4229616d"]] The first transaction is constrained to the function ``dynamicPyramid()``, the second one to the ``fallback()`` function, and finally, the third transaction is constrained to``collectAllFees()``, ``collectFeesInEther(uint256)`` and ``collectPercentOfFees(uint256)``. Make sure to use ``-t 3`` argument, since the length of the transaction sequence should match with the transaction count argument. ================================================ FILE: mypy-stubs/z3/__init__.pyi ================================================ from typing import ( Any, Iterable, Iterator, List, Optional, Sequence, Tuple, TypeVar, Union, overload, ) from .z3types import Ast, ContextObj class Context: ... class Z3PPObject: ... class AstRef(Z3PPObject): @overload def __init__(self, ast: Ast, ctx: Context) -> None: self.ast: Ast = ... self.ctx: Context = ... @overload def __init__(self, ast: Ast) -> None: self.ast: Ast = ... self.ctx: Context = ... def ctx_ref(self) -> ContextObj: ... def as_ast(self) -> Ast: ... def children(self) -> List[AstRef]: ... def eq(self, other: AstRef) -> bool: ... # TODO: Cannot add __eq__ currently: mypy complains conflict with # object.__eq__ signature # def __eq__(self, other: object) -> ArithRef: ... class SortRef(AstRef): ... class FuncDeclRef(AstRef): def arity(self) -> int: ... def name(self) -> str: ... def __call__(self, *args: ExprRef) -> ExprRef: ... class ExprRef(AstRef): def sort(self) -> SortRef: ... def decl(self) -> FuncDeclRef: ... class BoolSortRef(SortRef): ... class ArraySortRef(SortRef): ... class BoolRef(ExprRef): ... def is_true(a: BoolRef) -> bool: ... def is_false(a: BoolRef) -> bool: ... def is_int_value(a: AstRef) -> bool: ... def substitute(a: AstRef, *m: Tuple[AstRef, AstRef]) -> AstRef: ... def simplify(a: AstRef, *args: Any, **kwargs: Any) -> AstRef: ... class ArithSortRef(SortRef): ... class ArithRef(ExprRef): def __neg__(self) -> ExprRef: ... def __le__(self, other: ArithRef) -> BoolRef: ... def __lt__(self, other: ArithRef) -> BoolRef: ... def __ge__(self, other: ArithRef) -> BoolRef: ... def __gt__(self, other: ArithRef) -> BoolRef: ... def __add__(self, other: ArithRef) -> ArithRef: ... def __sub__(self, other: ArithRef) -> ArithRef: ... def __mul__(self, other: ArithRef) -> ArithRef: ... def __div__(self, other: ArithRef) -> ArithRef: ... def __truediv__(self, other: ArithRef) -> ArithRef: ... def __mod__(self, other: ArithRef) -> ArithRef: ... class BitVecSortRef(SortRef): ... class BitVecRef(ExprRef): def size(self) -> int: ... def __add__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __radd__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __mul__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __rmul__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __sub__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __rsub__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __or__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __ror__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __and__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __rand__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __xor__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __rxor__(self, other: Union[BitVecRef, int]) -> BitVecRef: ... def __pos__(self) -> BitVecRef: ... def __neg__(self) -> BitVecRef: ... def __invert__(self) -> BitVecRef: ... def __div__(self, other: BitVecRef) -> BitVecRef: ... def __rdiv__(self, other: BitVecRef) -> BitVecRef: ... def __truediv__(self, other: BitVecRef) -> BitVecRef: ... def __rtruediv__(self, other: BitVecRef) -> BitVecRef: ... def __mod__(self, other: BitVecRef) -> BitVecRef: ... def __rmod__(self, other: BitVecRef) -> BitVecRef: ... def __le__(self, other: BitVecRef) -> BoolRef: ... def __lt__(self, other: BitVecRef) -> BoolRef: ... def __ge__(self, other: BitVecRef) -> BoolRef: ... def __gt__(self, other: BitVecRef) -> BoolRef: ... def __rshift__(self, other: BitVecRef) -> BitVecRef: ... def __lshift__(self, other: BitVecRef) -> BitVecRef: ... def __rrshift__(self, other: BitVecRef) -> BitVecRef: ... def __rlshift__(self, other: BitVecRef) -> BitVecRef: ... class BitVecNumRef(BitVecRef): def as_long(self) -> int: ... def as_signed_long(self) -> int: ... def as_string(self) -> str: ... class IntNumRef(ArithRef): def as_long(self) -> int: ... def as_string(self) -> str: ... class SeqSortRef(ExprRef): ... class SeqRef(ExprRef): ... class ReSortRef(ExprRef): ... class ReRef(ExprRef): ... class ArrayRef(ExprRef): ... class CheckSatResult: ... class ModelRef(Z3PPObject): def __getitem__(self, k: FuncDeclRef) -> IntNumRef: ... def decls(self) -> Iterable[FuncDeclRef]: ... def __iter__(self) -> Iterator[FuncDeclRef]: ... class FuncEntry: def num_args(self) -> int: ... def arg_value(self, idx: int) -> ExprRef: ... def value(self) -> ExprRef: ... class FuncInterp(Z3PPObject): def else_value(self) -> ExprRef: ... def num_entries(self) -> int: ... def arity(self) -> int: ... def entry(self, idx: int) -> FuncEntry: ... class Goal(Z3PPObject): ... class Solver(Z3PPObject): ctx: Context def __init__(self, ctx: Optional[Context] = None) -> None: ... def to_smt2(self) -> str: ... def check(self) -> CheckSatResult: ... def push(self) -> None: ... def pop(self, num: Optional[int] = 1) -> None: ... def model(self) -> ModelRef: ... def set(self, *args: Any, **kwargs: Any) -> None: ... @overload def add(self, *args: Union[BoolRef, Goal]) -> None: ... @overload def add(self, args: Sequence[Union[BoolRef, Goal]]) -> None: ... def reset(self) -> None: ... class Optimize(Z3PPObject): ctx: Context def __init__(self, ctx: Optional[Context] = None) -> None: ... def check(self) -> CheckSatResult: ... def push(self) -> None: ... def pop(self) -> None: ... def model(self) -> ModelRef: ... def set(self, *args: Any, **kwargs: Any) -> None: ... @overload def add(self, *args: Union[BoolRef, Goal]) -> None: ... @overload def add(self, args: Sequence[Union[BoolRef, Goal]]) -> None: ... def minimize(self, element: ExprRef) -> None: ... def maximize(self, element: ExprRef) -> None: ... sat: CheckSatResult = ... unsat: CheckSatResult = ... @overload def Int(name: str) -> ArithRef: ... @overload def Int(name: str, ctx: Context) -> ArithRef: ... @overload def Bool(name: str) -> BoolRef: ... @overload def Bool(name: str, ctx: Context) -> BoolRef: ... @overload def parse_smt2_string(s: str) -> ExprRef: ... @overload def parse_smt2_string(s: str, ctx: Context) -> ExprRef: ... def Array(name: str, domain: SortRef, range: SortRef) -> ArrayRef: ... def K(domain: SortRef, v: Union[ExprRef, int, bool, str]) -> ArrayRef: ... # Can't give more precise types here since func signature is # a vararg list of ExprRef optionally followed by a Context def Or(*args: Any) -> BoolRef: ... def And(*args: Any) -> BoolRef: ... def Not(p: BoolRef, ctx: Optional[Context] = None) -> BoolRef: ... def Implies(a: BoolRef, b: BoolRef, ctx: Context) -> BoolRef: ... T = TypeVar("T", bound=ExprRef) def If(a: BoolRef, b: T, c: T, ctx: Optional[Context] = None) -> T: ... def ULE(a: T, b: T) -> BoolRef: ... def ULT(a: T, b: T) -> BoolRef: ... def UGE(a: T, b: T) -> BoolRef: ... def UGT(a: T, b: T) -> BoolRef: ... def UDiv(a: T, b: T) -> T: ... def URem(a: T, b: T) -> T: ... def SRem(a: T, b: T) -> T: ... def LShR(a: T, b: T) -> T: ... def RotateLeft(a: T, b: T) -> T: ... def RotateRight(a: T, b: T) -> T: ... def SignExt(n: int, a: BitVecRef) -> BitVecRef: ... def ZeroExt(n: int, a: BitVecRef) -> BitVecRef: ... @overload def Concat(args: List[Union[SeqRef, str]]) -> SeqRef: ... @overload def Concat(*args: Union[SeqRef, str]) -> SeqRef: ... @overload def Concat(args: List[ReRef]) -> ReRef: ... @overload def Concat(*args: ReRef) -> ReRef: ... @overload def Concat(args: List[BitVecRef]) -> BitVecRef: ... @overload def Concat(*args: BitVecRef) -> BitVecRef: ... @overload def Extract( high: Union[SeqRef], lo: Union[int, ArithRef], a: Union[int, ArithRef] ) -> SeqRef: ... @overload def Extract( high: Union[int, ArithRef], lo: Union[int, ArithRef], a: BitVecRef ) -> BitVecRef: ... @overload def Sum(arg: BitVecRef, *args: Union[BitVecRef, int]) -> BitVecRef: ... @overload def Sum(arg: Union[List[BitVecRef], int]) -> BitVecRef: ... @overload def Sum(arg: ArithRef, *args: Union[ArithRef, int]) -> ArithRef: ... # Can't include this overload as it overlaps with the second overload. # @overload # def Sum(arg: Union[List[ArithRef], int]) -> ArithRef: ... def Function(name: str, *sig: SortRef) -> FuncDeclRef: ... def IntVal(val: int, ctx: Optional[Context] = None) -> IntNumRef: ... def BoolVal(val: bool, ctx: Optional[Context] = None) -> BoolRef: ... def BitVecVal( val: int, bv: Union[int, BitVecSortRef], ctx: Optional[Context] = None ) -> BitVecRef: ... def BitVec( val: str, bv: Union[int, BitVecSortRef], ctx: Optional[Context] = None ) -> BitVecRef: ... def IntSort(ctx: Optional[Context] = None) -> ArithSortRef: ... def BoolSort(ctx: Optional[Context] = None) -> BoolSortRef: ... def ArraySort(domain: SortRef, range: SortRef) -> ArraySortRef: ... def BitVecSort(domain: int, ctx: Optional[Context] = None) -> BoolSortRef: ... def ForAll(vs: List[ExprRef], expr: ExprRef) -> ExprRef: ... def Select(arr: ExprRef, ind: ExprRef) -> ExprRef: ... def Update(arr: ArrayRef, ind: ExprRef, newVal: ExprRef) -> ArrayRef: ... def Store(arr: ArrayRef, ind: ExprRef, newVal: ExprRef) -> ArrayRef: ... def BVAddNoOverflow(a: BitVecRef, b: BitVecRef, signed: bool) -> BoolRef: ... def BVAddNoUnderflow(a: BitVecRef, b: BitVecRef) -> BoolRef: ... def BVSubNoOverflow(a: BitVecRef, b: BitVecRef) -> BoolRef: ... def BVSubNoUnderflow(a: BitVecRef, b: BitVecRef, signed: bool) -> BoolRef: ... def BVSDivNoOverflow(a: BitVecRef, b: BitVecRef) -> BoolRef: ... def BVSNegNoOverflow(a: BitVecRef) -> BoolRef: ... def BVMulNoOverflow(a: BitVecRef, b: BitVecRef, signed: bool) -> BoolRef: ... def BVMulNoUnderflow(a: BitVecRef, b: BitVecRef) -> BoolRef: ... ================================================ FILE: mypy-stubs/z3/z3core.pyi ================================================ from .z3types import Ast, ContextObj def Z3_mk_eq(ctx: ContextObj, a: Ast, b: Ast) -> Ast: ... def Z3_mk_div(ctx: ContextObj, a: Ast, b: Ast) -> Ast: ... ================================================ FILE: mypy-stubs/z3/z3types.pyi ================================================ from typing import Any class Z3Exception(Exception): def __init__(self, a: Any) -> None: self.value = a ... class ContextObj: ... class Ast: ... ================================================ FILE: myth ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """mythril.py: Bug hunting on the Ethereum blockchain http://www.github.com/ConsenSys/mythril """ from sys import exit import mythril.interfaces.cli if __name__ == "__main__": mythril.interfaces.cli.main() exit() ================================================ FILE: mythril/__init__.py ================================================ # We use RsT document formatting in docstring. For example :param to mark parameters. # See PEP 287 __docformat__ = "restructuredtext" import logging from mythril.plugin.loader import MythrilPluginLoader # Accept mythril.VERSION to get mythril's current version number from .__version__ import __version__ as VERSION log = logging.getLogger(__name__) ================================================ FILE: mythril/__main__.py ================================================ #!/usr/bin/env python3 # -*- coding: UTF-8 -*- import mythril.interfaces.cli if __name__ == "__main__": mythril.interfaces.cli.main() ================================================ FILE: mythril/__version__.py ================================================ """This file contains the current Mythril version. This file is suitable for sourcing inside POSIX shell, e.g. bash as well as for importing into Python. """ __version__ = "v0.24.8" ================================================ FILE: mythril/analysis/__init__.py ================================================ ================================================ FILE: mythril/analysis/analysis_args.py ================================================ ================================================ FILE: mythril/analysis/call_helpers.py ================================================ """This module provides helper functions for the analysis modules to deal with call functionality.""" from typing import Union from mythril.analysis.ops import Call, VarType, get_variable from mythril.laser.ethereum.natives import PRECOMPILE_COUNT from mythril.laser.ethereum.state.global_state import GlobalState def get_call_from_state(state: GlobalState) -> Union[Call, None]: """ :param state: :return: """ instruction = state.get_current_instruction() op = instruction["opcode"] stack = state.mstate.stack if op in ("CALL", "CALLCODE"): gas, to, value, meminstart, meminsz, _, _ = ( get_variable(stack[-1]), get_variable(stack[-2]), get_variable(stack[-3]), get_variable(stack[-4]), get_variable(stack[-5]), get_variable(stack[-6]), get_variable(stack[-7]), ) if to.type == VarType.CONCRETE and 0 < to.val <= PRECOMPILE_COUNT: return None if meminstart.type == VarType.CONCRETE and meminsz.type == VarType.CONCRETE: return Call( state.node, state, None, op, to, gas, value, state.mstate.memory[meminstart.val : meminsz.val * 4], ) else: return Call(state.node, state, None, op, to, gas, value) else: gas, to, meminstart, meminsz, _, _ = ( get_variable(stack[-1]), get_variable(stack[-2]), get_variable(stack[-3]), get_variable(stack[-4]), get_variable(stack[-5]), get_variable(stack[-6]), ) return Call(state.node, state, None, op, to, gas) ================================================ FILE: mythril/analysis/callgraph.py ================================================ """This module contains the configuration and functions to create call graphs.""" import re from typing import Dict, List from jinja2 import Environment, PackageLoader, select_autoescape from z3 import Z3Exception from mythril.laser.ethereum.svm import NodeFlags from mythril.laser.smt import simplify default_opts = { "autoResize": True, "height": "100%", "width": "100%", "manipulation": False, "layout": { "improvedLayout": True, "hierarchical": { "enabled": True, "levelSeparation": 450, "nodeSpacing": 200, "treeSpacing": 100, "blockShifting": True, "edgeMinimization": True, "parentCentralization": False, "direction": "LR", "sortMethod": "directed", }, }, "nodes": { "color": "#000000", "borderWidth": 1, "borderWidthSelected": 2, "chosen": True, "shape": "box", "font": {"align": "left", "color": "#FFFFFF"}, }, "edges": { "font": { "color": "#FFFFFF", "face": "arial", "background": "none", "strokeWidth": 0, "strokeColor": "#ffffff", "align": "horizontal", "multi": False, "vadjust": 0, } }, "physics": {"enabled": False}, } phrack_opts = { "nodes": { "color": "#000000", "borderWidth": 1, "borderWidthSelected": 1, "shapeProperties": {"borderDashes": False, "borderRadius": 0}, "chosen": True, "shape": "box", "font": {"face": "courier new", "align": "left", "color": "#000000"}, }, "edges": { "font": { "color": "#000000", "face": "courier new", "background": "none", "strokeWidth": 0, "strokeColor": "#ffffff", "align": "horizontal", "multi": False, "vadjust": 0, } }, } default_colors = [ { "border": "#26996f", "background": "#2f7e5b", "highlight": {"border": "#26996f", "background": "#28a16f"}, }, { "border": "#9e42b3", "background": "#842899", "highlight": {"border": "#9e42b3", "background": "#933da6"}, }, { "border": "#b82323", "background": "#991d1d", "highlight": {"border": "#b82323", "background": "#a61f1f"}, }, { "border": "#4753bf", "background": "#3b46a1", "highlight": {"border": "#4753bf", "background": "#424db3"}, }, { "border": "#26996f", "background": "#2f7e5b", "highlight": {"border": "#26996f", "background": "#28a16f"}, }, { "border": "#9e42b3", "background": "#842899", "highlight": {"border": "#9e42b3", "background": "#933da6"}, }, { "border": "#b82323", "background": "#991d1d", "highlight": {"border": "#b82323", "background": "#a61f1f"}, }, { "border": "#4753bf", "background": "#3b46a1", "highlight": {"border": "#4753bf", "background": "#424db3"}, }, ] phrack_color = { "border": "#000000", "background": "#ffffff", "highlight": {"border": "#000000", "background": "#ffffff"}, } def extract_nodes(statespace) -> List[Dict]: """ Extract nodes from the given statespace and create a list of node dictionaries with visual attributes for graph representation. :param statespace: The statespace object containing nodes and states information. :return: A list of dictionaries representing each node with its attributes. """ nodes = [] color_map = {} for node_key, node in statespace.nodes.items(): instructions = [state.get_current_instruction() for state in node.states] code_split = [] for instruction in instructions: address = instruction["address"] opcode = instruction["opcode"] if opcode.startswith("PUSH"): code_line = f"{address} {opcode} {instruction.get('argument', '')}" elif ( opcode.startswith("JUMPDEST") and NodeFlags.FUNC_ENTRY in node.flags and address == node.start_addr ): code_line = node.function_name else: code_line = f"{address} {opcode}" code_line = re.sub(r"([0-9a-f]{8})[0-9a-f]+", r"\1(...)", code_line) code_split.append(code_line) truncated_code = ( "\n".join(code_split) if len(code_split) < 7 else "\n".join(code_split[:6]) + "\n(click to expand +)" ) contract_name = node.get_cfg_dict()["contract_name"] if contract_name not in color_map: color = default_colors[len(color_map) % len(default_colors)] color_map[contract_name] = color nodes.append( { "id": str(node_key), "color": color_map.get(contract_name, default_colors[0]), "size": 150, "fullLabel": "\n".join(code_split), "label": truncated_code, "truncLabel": truncated_code, "isExpanded": False, } ) return nodes def extract_edges(statespace): """ :param statespace: :return: """ edges = [] for edge in statespace.edges: if edge.condition is None: label = "" else: try: label = str(simplify(edge.condition)).replace("\n", "") except Z3Exception: label = str(edge.condition).replace("\n", "") label = re.sub( r"([^_])([\d]{2}\d+)", lambda m: m.group(1) + hex(int(m.group(2))), label ) edges.append( { "from": str(edge.as_dict["from"]), "to": str(edge.as_dict["to"]), "arrows": "to", "label": label, "smooth": {"type": "cubicBezier"}, } ) return edges def generate_graph( statespace, title="Mythril / Ethereum LASER Symbolic VM", physics=False, phrackify=False, ): """ :param statespace: :param title: :param physics: :param phrackify: :return: """ env = Environment( loader=PackageLoader("mythril.analysis"), autoescape=select_autoescape(["html", "xml"]), ) template = env.get_template("callgraph.html") graph_opts = default_opts graph_opts["physics"]["enabled"] = physics return template.render( title=title, nodes=extract_nodes(statespace), edges=extract_edges(statespace), phrackify=phrackify, opts=graph_opts, ) ================================================ FILE: mythril/analysis/issue_annotation.py ================================================ from copy import deepcopy from typing import List from mythril.analysis.report import Issue from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.smt import SMTBool as Bool class IssueAnnotation(StateAnnotation): def __init__(self, conditions: List[Bool], issue: Issue, detector): """ Issue Annotation to propagate issues - conditions: A list of independent conditions [a, b, c, ...] Each of these have to be independently be satisfied - issue: The issue of the annotation - detector: The detection module """ self.conditions = conditions self.issue = issue self.detector = detector def persist_to_world_state(self) -> bool: return True @property def persist_over_calls(self) -> bool: return True def __copy__(self): return IssueAnnotation( conditions=deepcopy(self.conditions), issue=self.issue, detector=self.detector, ) def check_merge_annotation(self, annotation: "IssueAnnotation") -> bool: if self.conditions == annotation.conditions: return False if self.issue.address != annotation.issue.address: return False if type(self.detector) != type(annotation.detector): return False return True def merge_annotation(self, annotation: "IssueAnnotation") -> "IssueAnnotation": return self ================================================ FILE: mythril/analysis/module/__init__.py ================================================ from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.module.loader import ModuleLoader from mythril.analysis.module.util import ( get_detection_module_hooks, reset_callback_modules, ) ================================================ FILE: mythril/analysis/module/base.py ================================================ """Mythril Detection Modules This module includes an definition of the DetectionModule interface. DetectionModules implement different analysis rules to find weaknesses and vulnerabilities. """ import logging from abc import ABC, abstractmethod from enum import Enum from typing import List, Optional, Set, Tuple from mythril.analysis.report import Issue from mythril.laser.ethereum.state.global_state import GlobalState from mythril.support.support_args import args from mythril.support.support_utils import get_code_hash # Get logger instance log = logging.getLogger(__name__) class EntryPoint(Enum): """EntryPoint Enum This enum is used to signify the entry_point of detection modules. See also the class documentation of DetectionModule """ POST = 1 CALLBACK = 2 class DetectionModule(ABC): """The base detection module. All custom-built detection modules must inherit from this class. There are several class properties that expose information about the detection modules :param name: The name of the detection module :param swc_id: The SWC ID associated with the weakness that the module detects :param description: A description of the detection module, and what it detects :param entry_point: Mythril can run callback style detection modules, or modules that search the statespace. [IMPORTANT] POST entry points severely slow down the analysis, try to always use callback style modules :param pre_hooks: A list of instructions to hook the laser vm for (pre execution of the instruction) :param post_hooks: A list of instructions to hook the laser vm for (post execution of the instruction) """ name = "Detection Module Name / Title" swc_id = "SWC-000" description = "Detection module description" entry_point: EntryPoint = EntryPoint.CALLBACK pre_hooks: List[str] = [] post_hooks: List[str] = [] def __init__(self) -> None: self.issues: List[Issue] = [] self.cache: Set[Tuple[int, str]] = set() self.auto_cache = True def reset_module(self): """Resets the storage of this module""" self.issues = [] def update_cache(self, issues=None): """ Updates cache with param issues, updates against self.issues, if the param is None :param issues: The issues used to update the cache """ issues = issues or self.issues for issue in issues: self.cache.add((issue.address, issue.bytecode_hash)) def execute(self, target: GlobalState) -> Optional[List[Issue]]: """The entry point for execution, which is being called by Mythril. :param target: The target of the analysis, either a global state (callback) or the entire statespace (post) :return: List of encountered issues """ log.debug("Entering analysis module: {}".format(self.__class__.__name__)) if ( target.get_current_instruction()["address"], get_code_hash(target.environment.code.bytecode), ) in self.cache and self.auto_cache: log.debug( f"Issue in cache for the analysis module: {self.__class__.__name__}, address: {target.get_current_instruction()['address']}" ) return [] result = self._execute(target) log.debug("Exiting analysis module: {}".format(self.__class__.__name__)) if result and not args.use_issue_annotations: if self.auto_cache: self.update_cache(result) self.issues += result return result @abstractmethod def _execute(self, target) -> Optional[List[Issue]]: """Module main method (override this) :param target: The target of the analysis, either a global state (callback) or the entire statespace (post) :return: List of encountered issues """ pass def __repr__(self) -> str: return ( "<" "DetectionModule " "name={0.name} " "swc_id={0.swc_id} " "pre_hooks={0.pre_hooks} " "post_hooks={0.post_hooks} " "description={0.description}" ">" ).format(self) ================================================ FILE: mythril/analysis/module/loader.py ================================================ from typing import List, Optional from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.module.modules.arbitrary_jump import ArbitraryJump from mythril.analysis.module.modules.arbitrary_write import ArbitraryStorage from mythril.analysis.module.modules.delegatecall import ArbitraryDelegateCall from mythril.analysis.module.modules.dependence_on_origin import TxOrigin from mythril.analysis.module.modules.dependence_on_predictable_vars import ( PredictableVariables, ) from mythril.analysis.module.modules.ether_thief import EtherThief from mythril.analysis.module.modules.exceptions import Exceptions from mythril.analysis.module.modules.external_calls import ExternalCalls from mythril.analysis.module.modules.integer import IntegerArithmetics from mythril.analysis.module.modules.multiple_sends import MultipleSends from mythril.analysis.module.modules.requirements_violation import RequirementsViolation from mythril.analysis.module.modules.state_change_external_calls import ( StateChangeAfterCall, ) from mythril.analysis.module.modules.suicide import AccidentallyKillable from mythril.analysis.module.modules.transaction_order_dependence import ( TransactionOrderDependence, ) from mythril.analysis.module.modules.unchecked_retval import UncheckedRetval from mythril.analysis.module.modules.unexpected_ether import UnexpectedEther from mythril.analysis.module.modules.user_assertions import UserAssertions from mythril.exceptions import DetectorNotFoundError from mythril.support.support_args import args from mythril.support.support_utils import Singleton class ModuleLoader(object, metaclass=Singleton): """ModuleLoader The module loader class implements a singleton loader for detection modules. By default it will load the detection modules in the mythril package. Additional detection modules can be loaded using the register_module function call implemented by the ModuleLoader """ def __init__(self): self._modules = [] self._register_mythril_modules() def register_module(self, detection_module: DetectionModule): """Registers a detection module with the module loader""" if not isinstance(detection_module, DetectionModule): raise ValueError("The passed variable is not a valid detection module") self._modules.append(detection_module) def get_detection_modules( self, entry_point: Optional[EntryPoint] = None, white_list: Optional[List[str]] = None, ) -> List[DetectionModule]: """Gets registered detection modules :param entry_point: If specified: only return detection modules with this entry point :param white_list: If specified: only return whitelisted detection modules :return: The selected detection modules """ result = self._modules[:] if white_list: # Sanity check available_names = [type(module).__name__ for module in result] for name in white_list: if name not in available_names: raise DetectorNotFoundError( "Invalid detection module: {}".format(name) ) result = [ module for module in result if type(module).__name__ in white_list ] if args.use_integer_module is False: result = [ module for module in result if type(module).__name__ != "IntegerArithmetics" ] if entry_point: result = [module for module in result if module.entry_point == entry_point] return result def _register_mythril_modules(self): self._modules.extend( [ AccidentallyKillable(), ArbitraryJump(), ArbitraryStorage(), ArbitraryDelegateCall(), EtherThief(), Exceptions(), ExternalCalls(), IntegerArithmetics(), MultipleSends(), PredictableVariables(), RequirementsViolation(), StateChangeAfterCall(), TransactionOrderDependence(), TxOrigin(), UncheckedRetval(), UnexpectedEther(), UserAssertions(), ] ) ================================================ FILE: mythril/analysis/module/module_helpers.py ================================================ import traceback def is_prehook() -> bool: """Check if we are in prehook. One of Bernhard's trademark hacks! Let's leave it to this for now, unless we need to check prehook for a lot more modules. """ assert ("pre_hook" in traceback.format_stack()[-5]) or ( "post_hook" in traceback.format_stack()[-5] ) return "pre_hook" in traceback.format_stack()[-5] ================================================ FILE: mythril/analysis/module/modules/__init__.py ================================================ ================================================ FILE: mythril/analysis/module/modules/arbitrary_jump.py ================================================ """This module contains the detection code for Arbitrary jumps.""" import logging from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint, Issue from mythril.analysis.solver import UnsatError, get_transaction_sequence from mythril.analysis.swc_data import ARBITRARY_JUMP from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And, BitVec, symbol_factory from mythril.support.model import get_model log = logging.getLogger(__name__) DESCRIPTION = """ Search for jumps to arbitrary locations in the bytecode """ def is_unique_jumpdest(jump_dest: BitVec, state: GlobalState) -> bool: """ Handles cases where jump_dest evaluates to a single concrete value """ try: model = get_model(state.world_state.constraints) except UnsatError: return True concrete_jump_dest = model.eval(jump_dest.raw, model_completion=True) try: model = get_model( state.world_state.constraints + [symbol_factory.BitVecVal(concrete_jump_dest.as_long(), 256) != jump_dest] ) except UnsatError: return True return False class ArbitraryJump(DetectionModule): """This module searches for JUMPs to a user-specified location.""" name = "Caller can redirect execution to arbitrary bytecode locations" swc_id = ARBITRARY_JUMP description = DESCRIPTION entry_point = EntryPoint.CALLBACK pre_hooks = ["JUMP", "JUMPI"] def reset_module(self): """ Resets the module by clearing everything :return: """ super().reset_module() def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state): """ :param state: :return: """ jump_dest = state.mstate.stack[-1] if jump_dest.symbolic is False: return [] if is_unique_jumpdest(jump_dest, state) is True: return [] try: transaction_sequence = get_transaction_sequence( state, state.world_state.constraints ) except UnsatError: return [] log.info("Detected arbitrary jump dest") issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=state.get_current_instruction()["address"], swc_id=ARBITRARY_JUMP, title="Jump to an arbitrary instruction", severity="High", bytecode=state.environment.code.bytecode, description_head="The caller can redirect execution to arbitrary bytecode locations.", description_tail="It is possible to redirect the control flow to arbitrary locations in the code. " "This may allow an attacker to bypass security controls or manipulate the business logic of the " "smart contract. Avoid using low-level-operations and assembly to prevent this issue.", gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( conditions=[And(*state.world_state.constraints)], issue=issue, detector=self, ) ) return [issue] detector = ArbitraryJump() ================================================ FILE: mythril/analysis/module/modules/arbitrary_write.py ================================================ """This module contains the detection code for arbitrary storage write.""" import logging from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.potential_issues import ( PotentialIssue, get_potential_issues_annotation, ) from mythril.analysis.swc_data import WRITE_TO_ARBITRARY_STORAGE from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import symbol_factory log = logging.getLogger(__name__) DESCRIPTION = """ Search for any writes to an arbitrary storage slot """ class ArbitraryStorage(DetectionModule): """This module searches for a feasible write to an arbitrary storage slot.""" name = "Caller can write to arbitrary storage locations" swc_id = WRITE_TO_ARBITRARY_STORAGE description = DESCRIPTION entry_point = EntryPoint.CALLBACK pre_hooks = ["SSTORE"] def reset_module(self): """ Resets the module by clearing everything :return: """ super().reset_module() def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ potential_issues = self._analyze_state(state) annotation = get_potential_issues_annotation(state) annotation.potential_issues.extend(potential_issues) def _analyze_state(self, state): """ :param state: :return: """ write_slot = state.mstate.stack[-1] constraints = state.world_state.constraints + [ write_slot == symbol_factory.BitVecVal(324345425435, 256) ] potential_issue = PotentialIssue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=state.get_current_instruction()["address"], swc_id=WRITE_TO_ARBITRARY_STORAGE, title="Write to an arbitrary storage location", severity="High", bytecode=state.environment.code.bytecode, description_head="The caller can write to arbitrary storage locations.", description_tail="It is possible to write to arbitrary storage locations. By modifying the values of " "storage variables, attackers may bypass security controls or manipulate the business logic of " "the smart contract.", detector=self, constraints=constraints, ) return [potential_issue] detector = ArbitraryStorage() ================================================ FILE: mythril/analysis/module/modules/delegatecall.py ================================================ """This module contains the detection code for insecure delegate call usage.""" import logging from typing import List from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.potential_issues import ( PotentialIssue, get_potential_issues_annotation, ) from mythril.analysis.swc_data import DELEGATECALL_TO_UNTRUSTED_CONTRACT from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, ) from mythril.laser.smt import UGT, symbol_factory log = logging.getLogger(__name__) class ArbitraryDelegateCall(DetectionModule): """This module detects delegatecall to a user-supplied address.""" name = "Delegatecall to a user-specified address" swc_id = DELEGATECALL_TO_UNTRUSTED_CONTRACT description = "Check for invocations of delegatecall to a user-supplied address." entry_point = EntryPoint.CALLBACK pre_hooks = ["DELEGATECALL"] def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ potential_issues = self._analyze_state(state) annotation = get_potential_issues_annotation(state) annotation.potential_issues.extend(potential_issues) def _analyze_state(self, state: GlobalState) -> List[PotentialIssue]: """ :param state: the current state :return: returns the issues for that corresponding state """ gas = state.mstate.stack[-1] to = state.mstate.stack[-2] constraints = [ to == ACTORS.attacker, UGT(gas, symbol_factory.BitVecVal(2300, 256)), state.new_bitvec( "retval_{}".format(state.get_current_instruction()["address"]), 256 ) == 1, ] for tx in state.world_state.transaction_sequence: if not isinstance(tx, ContractCreationTransaction): constraints.append(tx.caller == ACTORS.attacker) try: address = state.get_current_instruction()["address"] logging.debug( "[DELEGATECALL] Detected potential delegatecall to a user-supplied address : {}".format( address ) ) description_head = "The contract delegates execution to another contract with a user-supplied address." description_tail = ( "The smart contract delegates execution to a user-supplied address.This could allow an attacker to " "execute arbitrary code in the context of this contract account and manipulate the state of the " "contract account or execute actions on its behalf." ) return [ PotentialIssue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=address, swc_id=DELEGATECALL_TO_UNTRUSTED_CONTRACT, bytecode=state.environment.code.bytecode, title="Delegatecall to user-supplied address", severity="High", description_head=description_head, description_tail=description_tail, constraints=constraints, detector=self, ) ] except UnsatError: return [] detector = ArbitraryDelegateCall() ================================================ FILE: mythril/analysis/module/modules/dependence_on_origin.py ================================================ """This module contains the detection code for predictable variable dependence.""" import logging from copy import copy from typing import List from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.report import Issue from mythril.analysis.swc_data import TX_ORIGIN_USAGE from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And log = logging.getLogger(__name__) class TxOriginAnnotation: """Symbol annotation added to a variable that is initialized with a call to the ORIGIN instruction.""" def __init__(self) -> None: pass class TxOrigin(DetectionModule): """This module detects whether control flow decisions are made based on the transaction origin.""" name = "Control flow depends on tx.origin" swc_id = TX_ORIGIN_USAGE description = "Check whether control flow decisions are influenced by tx.origin" entry_point = EntryPoint.CALLBACK pre_hooks = ["JUMPI"] post_hooks = ["ORIGIN"] def _execute(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ issues = [] if state.get_current_instruction()["opcode"] == "JUMPI": # We're in JUMPI prehook for annotation in state.mstate.stack[-2].annotations: if isinstance(annotation, TxOriginAnnotation): constraints = copy(state.world_state.constraints) try: transaction_sequence = solver.get_transaction_sequence( state, constraints ) except UnsatError: continue description = ( "The tx.origin environment variable has been found to influence a control flow decision. " "Note that using tx.origin as a security control might cause a situation where a user " "inadvertently authorizes a smart contract to perform an action on their behalf. It is " "recommended to use msg.sender instead." ) severity = "Low" """ Note: We report the location of the JUMPI instruction. Usually this maps to an if or require statement. """ issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=state.get_current_instruction()["address"], swc_id=TX_ORIGIN_USAGE, bytecode=state.environment.code.bytecode, title="Dependence on tx.origin", severity=severity, description_head="Use of tx.origin as a part of authorization control.", description_tail=description, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( conditions=[And(*constraints)], issue=issue, detector=self ) ) issues.append(issue) else: # In ORIGIN posthook state.mstate.stack[-1].annotate(TxOriginAnnotation()) return issues detector = TxOrigin() ================================================ FILE: mythril/analysis/module/modules/dependence_on_predictable_vars.py ================================================ """This module contains the detection code for predictable variable dependence.""" import logging from typing import List, cast from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.module.module_helpers import is_prehook from mythril.analysis.report import Issue from mythril.analysis.swc_data import TIMESTAMP_DEPENDENCE, WEAK_RANDOMNESS from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import ULT, And, symbol_factory log = logging.getLogger(__name__) predictable_ops = ["COINBASE", "GASLIMIT", "TIMESTAMP", "NUMBER"] class PredictableValueAnnotation: """Symbol annotation used if a variable is initialized from a predictable environment variable.""" def __init__(self, operation: str) -> None: self.operation = operation class OldBlockNumberUsedAnnotation(StateAnnotation): """Symbol annotation used if a variable is initialized from a predictable environment variable.""" def __init__(self) -> None: pass class PredictableVariables(DetectionModule): """This module detects whether control flow decisions are made using predictable parameters.""" name = "Control flow depends on a predictable environment variable" swc_id = "{} {}".format(TIMESTAMP_DEPENDENCE, WEAK_RANDOMNESS) description = ( "Check whether control flow decisions are influenced by block.coinbase," "block.gaslimit, block.timestamp or block.number." ) entry_point = EntryPoint.CALLBACK pre_hooks = ["JUMPI", "BLOCKHASH"] post_hooks = ["BLOCKHASH"] + predictable_ops def _execute(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ issues = [] if is_prehook(): opcode = state.get_current_instruction()["opcode"] if opcode == "JUMPI": # Look for predictable state variables in jump condition for annotation in state.mstate.stack[-2].annotations: if isinstance(annotation, PredictableValueAnnotation): constraints = state.world_state.constraints try: transaction_sequence = solver.get_transaction_sequence( state, constraints ) except UnsatError: continue description = ( annotation.operation + " is used to determine a control flow decision. " ) description += ( "Note that the values of variables like coinbase, gaslimit, block number and timestamp are " "predictable and can be manipulated by a malicious miner. Also keep in mind that " "attackers know hashes of earlier blocks. Don't use any of those environment variables " "as sources of randomness and be aware that use of these variables introduces " "a certain level of trust into miners." ) """ Usually report low severity except in cases where the hash of a previous block is used to determine control flow. """ severity = "Low" swc_id = ( TIMESTAMP_DEPENDENCE if "timestamp" in annotation.operation else WEAK_RANDOMNESS ) issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=state.get_current_instruction()["address"], swc_id=swc_id, bytecode=state.environment.code.bytecode, title="Dependence on predictable environment variable", severity=severity, description_head="A control flow decision is made based on {}.".format( annotation.operation ), description_tail=description, gas_used=( state.mstate.min_gas_used, state.mstate.max_gas_used, ), transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( conditions=[And(*constraints)], issue=issue, detector=self, ) ) issues.append(issue) elif opcode == "BLOCKHASH": param = state.mstate.stack[-1] constraint = [ ULT(param, state.environment.block_number), ULT( state.environment.block_number, symbol_factory.BitVecVal(2**255, 256), ), ] # Why the second constraint? Because without it Z3 returns a solution where param overflows. try: solver.get_model( state.world_state.constraints + constraint # type: ignore ) state.annotate(OldBlockNumberUsedAnnotation()) except UnsatError: pass else: # we're in post hook opcode = state.environment.code.instruction_list[state.mstate.pc - 1][ "opcode" ] if opcode == "BLOCKHASH": # if we're in the post hook of a BLOCKHASH op, check if an old block number was used to create it. annotations = cast( List[OldBlockNumberUsedAnnotation], list(state.get_annotations(OldBlockNumberUsedAnnotation)), ) if len(annotations): # We can append any block constraint here state.mstate.stack[-1].annotate( PredictableValueAnnotation("The block hash of a previous block") ) else: # Always create an annotation when COINBASE, GASLIMIT, TIMESTAMP or NUMBER is executed. state.mstate.stack[-1].annotate( PredictableValueAnnotation( "The block.{} environment variable".format(opcode.lower()) ) ) return issues detector = PredictableVariables() ================================================ FILE: mythril/analysis/module/modules/ether_thief.py ================================================ """This module contains the detection code for unauthorized ether withdrawal.""" import logging from copy import copy from mythril.analysis import solver from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.potential_issues import ( PotentialIssue, get_potential_issues_annotation, ) from mythril.analysis.swc_data import UNPROTECTED_ETHER_WITHDRAWAL from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.smt import UGT log = logging.getLogger(__name__) DESCRIPTION = """ Search for cases where Ether can be withdrawn to a user-specified address. An issue is reported if there is a valid end state where the attacker has successfully increased their Ether balance. """ class EtherThief(DetectionModule): """This module search for cases where Ether can be withdrawn to a user- specified address.""" name = "Any sender can withdraw ETH from the contract account" swc_id = UNPROTECTED_ETHER_WITHDRAWAL description = DESCRIPTION entry_point = EntryPoint.CALLBACK post_hooks = ["CALL", "STATICCALL"] def reset_module(self): """ Resets the module by clearing everything :return: """ super().reset_module() def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ potential_issues = self._analyze_state(state) annotation = get_potential_issues_annotation(state) annotation.potential_issues.extend(potential_issues) def _analyze_state(self, state): """ :param state: :return: """ state = copy(state) instruction = state.get_current_instruction() constraints = copy(state.world_state.constraints) constraints += [ UGT( state.world_state.balances[ACTORS.attacker], state.world_state.starting_balances[ACTORS.attacker], ), state.environment.sender == ACTORS.attacker, state.current_transaction.caller == state.current_transaction.origin, ] try: # Pre-solve so we only add potential issues if the attacker's balance is increased. solver.get_model(constraints) potential_issue = PotentialIssue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=instruction["address"] - 1, # In post hook we use offset of previous instruction swc_id=UNPROTECTED_ETHER_WITHDRAWAL, title="Unprotected Ether Withdrawal", severity="High", bytecode=state.environment.code.bytecode, description_head="Any sender can withdraw Ether from the contract account.", description_tail="Arbitrary senders other than the contract creator can profitably extract Ether " "from the contract account. Verify the business logic carefully and make sure that appropriate " "security controls are in place to prevent unexpected loss of funds.", detector=self, constraints=constraints, ) return [potential_issue] except UnsatError: return [] detector = EtherThief() ================================================ FILE: mythril/analysis/module/modules/exceptions.py ================================================ """This module contains the detection code for reachable exceptions.""" import logging from typing import List, Optional, cast from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.report import Issue from mythril.analysis.swc_data import ASSERT_VIOLATION from mythril.exceptions import UnsatError from mythril.laser.ethereum import util from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And from mythril.support.support_utils import get_code_hash log = logging.getLogger(__name__) # The function signature of Panic(uint256) PANIC_SIGNATURE = [78, 72, 123, 113] class LastJumpAnnotation(StateAnnotation): """State Annotation used if an overflow is both possible and used in the annotated path""" def __init__(self, last_jump: Optional[int] = None) -> None: self.last_jump: int = last_jump def __copy__(self): new_annotation = LastJumpAnnotation(self.last_jump) return new_annotation class Exceptions(DetectionModule): """""" name = "Assertion violation" swc_id = ASSERT_VIOLATION description = "Checks whether any exception states are reachable." entry_point = EntryPoint.CALLBACK pre_hooks = ["INVALID", "JUMP", "REVERT"] def __init__(self): super().__init__() self.auto_cache = False def _execute(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ issues = self._analyze_state(state) for issue in issues: self.cache.add((issue.source_location, issue.bytecode_hash)) return issues def _analyze_state(self, state) -> List[Issue]: """ :param state: :return: """ opcode = state.get_current_instruction()["opcode"] address = state.get_current_instruction()["address"] annotations = cast( List[LastJumpAnnotation], [a for a in state.get_annotations(LastJumpAnnotation)], ) if len(annotations) == 0: state.annotate(LastJumpAnnotation()) annotations = cast( List[LastJumpAnnotation], [a for a in state.get_annotations(LastJumpAnnotation)], ) if opcode == "JUMP": annotations[0].last_jump = address return [] if opcode == "REVERT" and not is_assertion_failure(state): return [] cache_address = annotations[0].last_jump if ( cache_address, get_code_hash(state.environment.code.bytecode), ) in self.cache: return [] log.debug( "ASSERT_FAIL/REVERT in function " + state.environment.active_function_name ) try: description_tail = ( "It is possible to trigger an assertion violation. Note that Solidity assert() statements should " "only be used to check invariants. Review the transaction trace generated for this issue and " "either make sure your program logic is correct, or use require() instead of assert() if your goal " "is to constrain user inputs or enforce preconditions. Remember to validate inputs from both callers " "(for instance, via passed arguments) and callees (for instance, via return values)." ) transaction_sequence = solver.get_transaction_sequence( state, state.world_state.constraints ) issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=address, swc_id=ASSERT_VIOLATION, title="Exception State", severity="Medium", description_head="An assertion violation was triggered.", description_tail=description_tail, bytecode=state.environment.code.bytecode, transaction_sequence=transaction_sequence, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), source_location=cache_address, ) state.annotate( IssueAnnotation( conditions=[And(*state.world_state.constraints)], issue=issue, detector=self, ) ) return [issue] except UnsatError: log.debug("no model found") return [] def is_assertion_failure(global_state): state = global_state.mstate offset, length = state.stack[-1], state.stack[-2] try: return_data = state.memory[ util.get_concrete_int(offset) : util.get_concrete_int(offset + length) ] except TypeError: return False return return_data[:4] == PANIC_SIGNATURE and return_data[-1] == 1 detector = Exceptions() ================================================ FILE: mythril/analysis/module/modules/external_calls.py ================================================ """This module contains the detection code for potentially insecure low-level calls.""" import logging from copy import copy from mythril.analysis import solver from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.potential_issues import ( PotentialIssue, get_potential_issues_annotation, ) from mythril.analysis.swc_data import REENTRANCY from mythril.exceptions import UnsatError from mythril.laser.ethereum.natives import PRECOMPILE_COUNT from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.smt import UGT, BitVec, Or, symbol_factory log = logging.getLogger(__name__) DESCRIPTION = """ Search for external calls with unrestricted gas to a user-specified address. """ def _is_precompile_call(global_state: GlobalState): to: BitVec = global_state.mstate.stack[-2] constraints: Constraints = copy(global_state.world_state.constraints) constraints += [ Or( to < symbol_factory.BitVecVal(1, 256), to > symbol_factory.BitVecVal(PRECOMPILE_COUNT, 256), ) ] try: solver.get_model(constraints) return False except UnsatError: return True class ExternalCalls(DetectionModule): """This module searches for low level calls (e.g. call.value()) that forward all gas to the callee.""" name = "External call to another contract" swc_id = REENTRANCY description = DESCRIPTION entry_point = EntryPoint.CALLBACK pre_hooks = ["CALL"] def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ potential_issues = self._analyze_state(state) annotation = get_potential_issues_annotation(state) annotation.potential_issues.extend(potential_issues) def _analyze_state(self, state: GlobalState): """ :param state: :return: """ if state.environment.active_function_name == "constructor": return [] gas = state.mstate.stack[-1] to = state.mstate.stack[-2] address = state.get_current_instruction()["address"] try: constraints = Constraints( [UGT(gas, symbol_factory.BitVecVal(2300, 256)), to == ACTORS.attacker] ) solver.get_transaction_sequence( state, constraints + state.world_state.constraints ) description_head = "A call to a user-supplied address is executed." description_tail = ( "An external message call to an address specified by the caller is executed. Note that " "the callee account might contain arbitrary code and could re-enter any function " "within this contract. Reentering the contract in an intermediate state may lead to " "unexpected behaviour. Make sure that no state modifications " "are executed after this call and/or reentrancy guards are in place." ) issue = PotentialIssue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=address, swc_id=REENTRANCY, title="External Call To User-Supplied Address", bytecode=state.environment.code.bytecode, severity="Low", description_head=description_head, description_tail=description_tail, constraints=constraints, detector=self, ) except UnsatError: log.debug("[EXTERNAL_CALLS] No model found.") return [] return [issue] detector = ExternalCalls() ================================================ FILE: mythril/analysis/module/modules/integer.py ================================================ """This module contains the detection code for integer overflows and underflows.""" import logging from copy import copy from math import ceil, log2 from typing import List, Set, cast from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.report import Issue from mythril.analysis.swc_data import INTEGER_OVERFLOW_AND_UNDERFLOW from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import ( And, BitVec, BVAddNoOverflow, BVMulNoOverflow, BVSubNoUnderflow, Expression, If, Not, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) log = logging.getLogger(__name__) class OverUnderflowAnnotation: """Symbol Annotation used if a BitVector can overflow""" def __init__( self, overflowing_state: GlobalState, operator: str, constraint: Bool ) -> None: self.overflowing_state = overflowing_state self.operator = operator self.constraint = constraint def __deepcopy__(self, memodict={}): new_annotation = copy(self) return new_annotation class OverUnderflowStateAnnotation(StateAnnotation): """State Annotation used if an overflow is both possible and used in the annotated path""" def __init__(self) -> None: self.overflowing_state_annotations: Set[OverUnderflowAnnotation] = set() def __copy__(self): new_annotation = OverUnderflowStateAnnotation() new_annotation.overflowing_state_annotations = copy( self.overflowing_state_annotations ) return new_annotation class IntegerArithmetics(DetectionModule): """This module searches for integer over- and underflows.""" name = "Integer overflow or underflow" swc_id = INTEGER_OVERFLOW_AND_UNDERFLOW description = ( "For every SUB instruction, check if there's a possible state " "where op1 > op0. For every ADD, MUL instruction, check if " "there's a possible state where op1 + op0 > 2^32 - 1" ) entry_point = EntryPoint.CALLBACK pre_hooks = [ "ADD", "MUL", "EXP", "SUB", "SSTORE", "JUMPI", "STOP", "RETURN", "CALL", ] def __init__(self) -> None: """ Cache satisfiability of overflow constraints """ super().__init__() self._ostates_satisfiable: Set[GlobalState] = set() self._ostates_unsatisfiable: Set[GlobalState] = set() def reset_module(self): """ Resets the module :return: """ super().reset_module() self._ostates_satisfiable = set() self._ostates_unsatisfiable = set() def _execute(self, state: GlobalState) -> List[Issue]: """Executes analysis module for integer underflow and integer overflow. :param state: Statespace to analyse :return: Found issues """ opcode = state.get_current_instruction()["opcode"] funcs = { "ADD": [self._handle_add], "SUB": [self._handle_sub], "MUL": [self._handle_mul], "SSTORE": [self._handle_sstore], "JUMPI": [self._handle_jumpi], "CALL": [self._handle_call], "RETURN": [self._handle_return, self._handle_transaction_end], "STOP": [self._handle_transaction_end], "EXP": [self._handle_exp], } results = [] for func in funcs[opcode]: result = func(state) if result and len(result) > 0: results += result return results def _get_args(self, state): stack = state.mstate.stack op0, op1 = ( self._make_bitvec_if_not(stack, -1), self._make_bitvec_if_not(stack, -2), ) return op0, op1 def _handle_add(self, state): op0, op1 = self._get_args(state) c = Not(BVAddNoOverflow(op0, op1, False)) annotation = OverUnderflowAnnotation(state, "addition", c) op0.annotate(annotation) def _handle_mul(self, state): op0, op1 = self._get_args(state) c = Not(BVMulNoOverflow(op0, op1, False)) annotation = OverUnderflowAnnotation(state, "multiplication", c) op0.annotate(annotation) def _handle_sub(self, state): op0, op1 = self._get_args(state) c = Not(BVSubNoUnderflow(op0, op1, False)) annotation = OverUnderflowAnnotation(state, "subtraction", c) op0.annotate(annotation) def _handle_exp(self, state): op0, op1 = self._get_args(state) if (op1.symbolic is False and op1.value == 0) or ( op0.symbolic is False and op0.value < 2 ): return if op0.symbolic and op1.symbolic: constraint = And( op1 > symbol_factory.BitVecVal(256, 256), op0 > symbol_factory.BitVecVal(1, 256), ) elif op0.symbolic: constraint = op0 >= symbol_factory.BitVecVal( 2 ** ceil(256 / op1.value), 256 ) else: constraint = op1 >= symbol_factory.BitVecVal( ceil(256 / log2(op0.value)), 256 ) annotation = OverUnderflowAnnotation(state, "exponentiation", constraint) op0.annotate(annotation) @staticmethod def _make_bitvec_if_not(stack, index): value = stack[index] if isinstance(value, BitVec): return value if isinstance(value, Bool): return If(value, 1, 0) stack[index] = symbol_factory.BitVecVal(value, 256) return stack[index] @staticmethod def _get_title(_type): return "Integer {}".format(_type) @staticmethod def _handle_sstore(state: GlobalState) -> None: stack = state.mstate.stack value = stack[-2] if not isinstance(value, Expression): return state_annotation = _get_overflowunderflow_state_annotation(state) for annotation in value.annotations: if isinstance(annotation, OverUnderflowAnnotation): state_annotation.overflowing_state_annotations.add(annotation) @staticmethod def _handle_jumpi(state): stack = state.mstate.stack value = stack[-2] state_annotation = _get_overflowunderflow_state_annotation(state) for annotation in value.annotations: if isinstance(annotation, OverUnderflowAnnotation): state_annotation.overflowing_state_annotations.add(annotation) @staticmethod def _handle_call(state): stack = state.mstate.stack value = stack[-3] state_annotation = _get_overflowunderflow_state_annotation(state) for annotation in value.annotations: if isinstance(annotation, OverUnderflowAnnotation): state_annotation.overflowing_state_annotations.add(annotation) @staticmethod def _handle_return(state: GlobalState) -> None: """ Adds all the annotations into the state which correspond to the locations in the memory returned by RETURN opcode. :param state: The Global State """ stack = state.mstate.stack offset, length = stack[-1], stack[-2] state_annotation = _get_overflowunderflow_state_annotation(state) for element in state.mstate.memory[offset : offset + length]: if not isinstance(element, Expression): continue for annotation in element.annotations: if isinstance(annotation, OverUnderflowAnnotation): state_annotation.overflowing_state_annotations.add(annotation) def _handle_transaction_end(self, state: GlobalState) -> List[Issue]: state_annotation = _get_overflowunderflow_state_annotation(state) issues = [] for annotation in state_annotation.overflowing_state_annotations: ostate = annotation.overflowing_state if ostate in self._ostates_unsatisfiable: continue if ostate not in self._ostates_satisfiable: try: constraints = ostate.world_state.constraints + [ annotation.constraint ] solver.get_model(constraints) self._ostates_satisfiable.add(ostate) except: self._ostates_unsatisfiable.add(ostate) continue log.debug( "Checking overflow in {} at transaction end address {}, ostate address {}".format( state.get_current_instruction()["opcode"], state.get_current_instruction()["address"], ostate.get_current_instruction()["address"], ) ) try: constraints = state.world_state.constraints + [annotation.constraint] transaction_sequence = solver.get_transaction_sequence( state, constraints ) except UnsatError: continue description_head = "The arithmetic operator can {}.".format( "underflow" if annotation.operator == "subtraction" else "overflow" ) description_tail = "It is possible to cause an integer overflow or underflow in the arithmetic operation. " "Prevent this by constraining inputs using the require() statement or use the OpenZeppelin " "SafeMath library for integer arithmetic operations. " "Refer to the transaction trace generated for this issue to reproduce the issue." issue = Issue( contract=ostate.environment.active_account.contract_name, function_name=ostate.environment.active_function_name, address=ostate.get_current_instruction()["address"], swc_id=INTEGER_OVERFLOW_AND_UNDERFLOW, bytecode=ostate.environment.code.bytecode, title="Integer Arithmetic Bugs", severity="High", description_head=description_head, description_tail=description_tail, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( issue=issue, detector=self, conditions=[And(*constraints)] ) ) issues.append(issue) return issues detector = IntegerArithmetics() def _get_address_from_state(state): return state.get_current_instruction()["address"] def _get_overflowunderflow_state_annotation( state: GlobalState, ) -> OverUnderflowStateAnnotation: state_annotations = cast( List[OverUnderflowStateAnnotation], list(state.get_annotations(OverUnderflowStateAnnotation)), ) if len(state_annotations) == 0: state_annotation = OverUnderflowStateAnnotation() state.annotate(state_annotation) return state_annotation else: return state_annotations[0] ================================================ FILE: mythril/analysis/module/modules/multiple_sends.py ================================================ """This module contains the detection code to find multiple sends occurring in a single transaction.""" import logging from copy import copy from typing import List, cast from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.report import Issue from mythril.analysis.solver import UnsatError, get_transaction_sequence from mythril.analysis.swc_data import MULTIPLE_SENDS from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And log = logging.getLogger(__name__) class MultipleSendsAnnotation(StateAnnotation): def __init__(self) -> None: self.call_offsets: List[int] = [] def __copy__(self): result = MultipleSendsAnnotation() result.call_offsets = copy(self.call_offsets) return result class MultipleSends(DetectionModule): """This module checks for multiple sends in a single transaction.""" name = "Multiple external calls in the same transaction" swc_id = MULTIPLE_SENDS description = "Check for multiple sends in a single transaction" entry_point = EntryPoint.CALLBACK pre_hooks = ["CALL", "DELEGATECALL", "STATICCALL", "CALLCODE", "RETURN", "STOP"] def _execute(self, state: GlobalState) -> None: return self._analyze_state(state) def _analyze_state(self, state: GlobalState): """ :param state: the current state :return: returns the issues for that corresponding state """ instruction = state.get_current_instruction() annotations = cast( List[MultipleSendsAnnotation], list(state.get_annotations(MultipleSendsAnnotation)), ) if len(annotations) == 0: state.annotate(MultipleSendsAnnotation()) annotations = cast( List[MultipleSendsAnnotation], list(state.get_annotations(MultipleSendsAnnotation)), ) call_offsets = annotations[0].call_offsets if instruction["opcode"] in ["CALL", "DELEGATECALL", "STATICCALL", "CALLCODE"]: call_offsets.append(state.get_current_instruction()["address"]) else: # RETURN or STOP for offset in call_offsets[1:]: try: transaction_sequence = get_transaction_sequence( state, state.world_state.constraints ) except UnsatError: continue description_tail = ( "This call is executed following another call within the same transaction. It is possible " "that the call never gets executed if a prior call fails permanently. This might be caused " "intentionally by a malicious callee. If possible, refactor the code such that each transaction " "only executes one external call or " "make sure that all callees can be trusted (i.e. they’re part of your own codebase)." ) issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=offset, swc_id=MULTIPLE_SENDS, bytecode=state.environment.code.bytecode, title="Multiple Calls in a Single Transaction", severity="Low", description_head="Multiple calls are executed in the same transaction.", description_tail=description_tail, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( conditions=[And(*state.world_state.constraints)], issue=issue, detector=self, ) ) return [issue] return [] detector = MultipleSends() ================================================ FILE: mythril/analysis/module/modules/requirements_violation.py ================================================ """This module contains the detection code for requirement violations in a call""" import logging from typing import List from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule from mythril.analysis.report import Issue from mythril.analysis.swc_data import REQUIREMENT_VIOLATION from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And log = logging.getLogger(__name__) class RequirementsViolation(DetectionModule): """This module detects transaction order dependence""" name = "Requirement Violation" swc_id = REQUIREMENT_VIOLATION description = "Checks whether any requirements violate in a call." entrypoint = "callback" pre_hooks = ["REVERT"] plugin_default_enabled = True def _execute(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ issues = self._analyze_state(state) for issue in issues: self.cache.add((issue.source_location, issue.bytecode_hash)) return issues def _analyze_state(self, state) -> List[Issue]: """ :param state: :return: """ if len(state.transaction_stack) < 2: return [] try: address = state.get_current_instruction()["address"] description_head = "A requirement was violated in a nested call and the call was reverted as a result." description_tail = "Make sure valid inputs are provided to the nested call (for instance, via passed arguments)." transaction_sequence = solver.get_transaction_sequence( state, state.world_state.constraints ) issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=address, swc_id=REQUIREMENT_VIOLATION, title="requirement violation", severity="Medium", description_head=description_head, description_tail=description_tail, bytecode=state.environment.code.bytecode, transaction_sequence=transaction_sequence, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), ) state.annotate( IssueAnnotation( conditions=[And(*state.world_state.constraints)], issue=issue, detector=self, ) ) return [issue] except UnsatError: log.debug("no model found") return [] detector = RequirementsViolation() ================================================ FILE: mythril/analysis/module/modules/state_change_external_calls.py ================================================ import logging from copy import copy from typing import List, Optional, cast from mythril.analysis import solver from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.potential_issues import ( PotentialIssue, get_potential_issues_annotation, ) from mythril.analysis.swc_data import REENTRANCY from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import UGT, BitVec, Or, symbol_factory log = logging.getLogger(__name__) DESCRIPTION = """ Check whether the account state is accesses after the execution of an external call """ CALL_LIST = ["CALL", "DELEGATECALL", "CALLCODE"] STATE_READ_WRITE_LIST = ["SSTORE", "SLOAD", "CREATE", "CREATE2"] class StateChangeCallsAnnotation(StateAnnotation): def __init__(self, call_state: GlobalState, user_defined_address: bool) -> None: self.call_state = call_state self.state_change_states: List[GlobalState] = [] self.user_defined_address = user_defined_address def __copy__(self): new_annotation = StateChangeCallsAnnotation( self.call_state, self.user_defined_address ) new_annotation.state_change_states = self.state_change_states[:] return new_annotation def get_issue( self, global_state: GlobalState, detector: DetectionModule ) -> Optional[PotentialIssue]: if not self.state_change_states: return None constraints = Constraints() gas = self.call_state.mstate.stack[-1] to = self.call_state.mstate.stack[-2] constraints += [ UGT(gas, symbol_factory.BitVecVal(2300, 256)), Or( to > symbol_factory.BitVecVal(16, 256), to == symbol_factory.BitVecVal(0, 256), ), ] if self.user_defined_address: constraints += [to == 0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF] try: solver.get_transaction_sequence( global_state, constraints + global_state.world_state.constraints ) except UnsatError: return None severity = "Medium" if self.user_defined_address else "Low" address = global_state.get_current_instruction()["address"] logging.debug( "[EXTERNAL_CALLS] Detected state changes at addresses: {}".format(address) ) read_or_write = "Write to" if global_state.get_current_instruction()["opcode"] == "SLOAD": read_or_write = "Read of" address_type = "user defined" if self.user_defined_address else "fixed" description_head = "{} persistent state following external call".format( read_or_write ) description_tail = ( "The contract account state is accessed after an external call to a {} address. " "To prevent reentrancy issues, consider accessing the state only before the call, especially if the callee is untrusted. " "Alternatively, a reentrancy lock can be used to prevent " "untrusted callees from re-entering the contract in an intermediate state.".format( address_type ) ) return PotentialIssue( contract=global_state.environment.active_account.contract_name, function_name=global_state.environment.active_function_name, address=address, title="State access after external call", severity=severity, description_head=description_head, description_tail=description_tail, swc_id=REENTRANCY, bytecode=global_state.environment.code.bytecode, constraints=constraints, detector=detector, ) class StateChangeAfterCall(DetectionModule): """This module searches for state change after low level calls (e.g. call.value()) that forward gas to the callee.""" name = "State change after an external call" swc_id = REENTRANCY description = DESCRIPTION entry_point = EntryPoint.CALLBACK pre_hooks = CALL_LIST + STATE_READ_WRITE_LIST def _execute(self, state: GlobalState) -> None: issues = self._analyze_state(state) annotation = get_potential_issues_annotation(state) annotation.potential_issues.extend(issues) @staticmethod def _add_external_call(global_state: GlobalState) -> None: gas = global_state.mstate.stack[-1] to = global_state.mstate.stack[-2] try: constraints = copy(global_state.world_state.constraints) solver.get_model( constraints + [ UGT(gas, symbol_factory.BitVecVal(2300, 256)), Or( to > symbol_factory.BitVecVal(16, 256), to == symbol_factory.BitVecVal(0, 256), ), ] ) # Check whether we can also set the callee address try: constraints += [to == 0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF] solver.get_model(constraints) global_state.annotate(StateChangeCallsAnnotation(global_state, True)) except UnsatError: global_state.annotate(StateChangeCallsAnnotation(global_state, False)) except UnsatError: pass def _analyze_state(self, global_state: GlobalState) -> List[PotentialIssue]: if global_state.environment.active_function_name == "constructor": return [] annotations = cast( List[StateChangeCallsAnnotation], list(global_state.get_annotations(StateChangeCallsAnnotation)), ) op_code = global_state.get_current_instruction()["opcode"] if len(annotations) == 0 and op_code in STATE_READ_WRITE_LIST: return [] if op_code in STATE_READ_WRITE_LIST: for annotation in annotations: annotation.state_change_states.append(global_state) # Record state changes following from a transfer of ether if op_code in CALL_LIST: value: BitVec = global_state.mstate.stack[-3] if StateChangeAfterCall._balance_change(value, global_state): for annotation in annotations: annotation.state_change_states.append(global_state) # Record external calls if op_code in CALL_LIST: StateChangeAfterCall._add_external_call(global_state) # Check for vulnerabilities vulnerabilities = [] for annotation in annotations: if not annotation.state_change_states: continue issue = annotation.get_issue(global_state, self) if issue: vulnerabilities.append(issue) return vulnerabilities @staticmethod def _balance_change(value: BitVec, global_state: GlobalState) -> bool: if not value.symbolic: assert value.value is not None return value.value > 0 else: constraints = copy(global_state.world_state.constraints) try: solver.get_model( constraints + [value > symbol_factory.BitVecVal(0, 256)] ) return True except UnsatError: return False detector = StateChangeAfterCall() ================================================ FILE: mythril/analysis/module/modules/suicide.py ================================================ import logging from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.report import Issue from mythril.analysis.swc_data import UNPROTECTED_SELFDESTRUCT from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, ) from mythril.laser.smt.bool import And log = logging.getLogger(__name__) DESCRIPTION = """ Check if the contact can be 'accidentally' killed by anyone. For kill-able contracts, also check whether it is possible to direct the contract balance to the attacker. """ class AccidentallyKillable(DetectionModule): """This module checks if the contact can be 'accidentally' killed by anyone.""" name = "Contract can be accidentally killed by anyone" swc_id = UNPROTECTED_SELFDESTRUCT description = DESCRIPTION entry_point = EntryPoint.CALLBACK pre_hooks = ["SELFDESTRUCT"] def __init__(self): super().__init__() self._cache_address = {} def reset_module(self): """ Resets the module :return: """ super().reset_module() def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state): log.info("Suicide module: Analyzing suicide instruction") instruction = state.get_current_instruction() to = state.mstate.stack[-1] log.debug("SELFDESTRUCT in function %s", state.environment.active_function_name) description_head = "Any sender can cause the contract to self-destruct." attacker_constraints = [] for tx in state.world_state.transaction_sequence: if not isinstance(tx, ContractCreationTransaction): attacker_constraints.append( And(tx.caller == ACTORS.attacker, tx.caller == tx.origin) ) try: try: constraints = ( state.world_state.constraints + [to == ACTORS.attacker] + attacker_constraints ) transaction_sequence = solver.get_transaction_sequence( state, constraints ) description_tail = ( "Any sender can trigger execution of the SELFDESTRUCT instruction to destroy this " "contract account and withdraw its balance to an arbitrary address. Review the transaction trace " "generated for this issue and make sure that appropriate security controls are in place to prevent " "unrestricted access." ) except UnsatError: constraints = state.world_state.constraints + attacker_constraints transaction_sequence = solver.get_transaction_sequence( state, constraints ) description_tail = ( "Any sender can trigger execution of the SELFDESTRUCT instruction to destroy this " "contract account. Review the transaction trace generated for this issue and make sure that " "appropriate security controls are in place to prevent unrestricted access." ) issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=instruction["address"], swc_id=UNPROTECTED_SELFDESTRUCT, bytecode=state.environment.code.bytecode, title="Unprotected Selfdestruct", severity="High", description_head=description_head, description_tail=description_tail, transaction_sequence=transaction_sequence, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), ) state.annotate( IssueAnnotation( conditions=[And(*constraints)], issue=issue, detector=self ) ) return [issue] except UnsatError: log.debug("No model found") return [] detector = AccidentallyKillable() ================================================ FILE: mythril/analysis/module/modules/transaction_order_dependence.py ================================================ """This module contains the detection code for transaction order dependence.""" import logging from mythril.analysis import solver from mythril.analysis.module.base import DetectionModule from mythril.analysis.potential_issues import ( PotentialIssue, get_potential_issues_annotation, ) from mythril.analysis.swc_data import TX_ORDER_DEPENDENCE from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.smt import Or from mythril.laser.smt import SMTBool as Bool log = logging.getLogger(__name__) DESCRIPTION = """ Search for calls whose value depends on balance or storage. """ class BalanceAnnotation: def __init__(self, caller): self.caller = caller class StorageAnnotation: def __init__(self, caller): self.caller = caller class TransactionOrderDependence(DetectionModule): """This module detects transaction order dependence.""" name = "Transaction Order Dependence" swc_id = TX_ORDER_DEPENDENCE description = DESCRIPTION entrypoint = "callback" pre_hooks = ["CALL"] post_hooks = ["BALANCE", "SLOAD"] plugin_default_enabled = True def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ potential_issues = self._analyze_state(state) annotation = get_potential_issues_annotation(state) annotation.potential_issues.extend(potential_issues) @staticmethod def annotate_balance_storage_vals(state, opcode): val = state.mstate.stack[-1] if opcode == "BALANCE": annotation = BalanceAnnotation else: annotation = StorageAnnotation if len(val.get_annotations(annotation)) == 0: state.mstate.stack[-1].annotate(annotation(state.environment.sender)) return [] def _analyze_state(self, state: GlobalState): """ :param state: :return: """ opcode = state.get_current_instruction()["opcode"] if opcode != "CALL": opcode = state.environment.code.instruction_list[state.mstate.pc - 1][ "opcode" ] if opcode in ("BALANCE", "SLOAD"): self.annotate_balance_storage_vals(state, opcode) return [] value = state.mstate.stack[-3] if ( len(value.get_annotations(StorageAnnotation)) + len(value.get_annotations(BalanceAnnotation)) == 0 ): return [] callers = [] storage_annotations = value.get_annotations(StorageAnnotation) if len(storage_annotations) == 1: callers.append(storage_annotations[0].caller) balance_annotations = value.get_annotations(BalanceAnnotation) if len(balance_annotations) == 1: callers.append(balance_annotations[0].caller) address = state.get_current_instruction()["address"] call_constraint = Bool(False) for caller in callers: call_constraint = Or(call_constraint, ACTORS.attacker == caller) try: constraints = state.world_state.constraints + [call_constraint] solver.get_transaction_sequence(state, constraints) description_head = ( "The value of the call is dependent on balance or storage write" ) description_tail = ( "This can lead to race conditions. An attacker may be able to run a transaction after our transaction " "which can change the value of the call" ) issue = PotentialIssue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=address, swc_id=TX_ORDER_DEPENDENCE, title="Transaction Order Dependence", bytecode=state.environment.code.bytecode, severity="Medium", description_head=description_head, description_tail=description_tail, constraints=constraints, detector=self, ) except UnsatError: log.debug("[Transaction Order Dependence] No model found.") return [] return [issue] detector = TransactionOrderDependence() ================================================ FILE: mythril/analysis/module/modules/unchecked_retval.py ================================================ """This module contains detection code to find occurrences of calls whose return value remains unchecked.""" import logging from copy import copy from typing import List, cast from typing_extensions import TypedDict from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.report import Issue from mythril.analysis.swc_data import UNCHECKED_RET_VAL from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And from mythril.laser.smt.bitvec import BitVec log = logging.getLogger(__name__) class RetVal(TypedDict): address: int retval: BitVec class UncheckedRetvalAnnotation(StateAnnotation): def __init__(self) -> None: self.retvals: List[RetVal] = [] def __copy__(self): result = UncheckedRetvalAnnotation() result.retvals = copy(self.retvals) return result class UncheckedRetval(DetectionModule): """A detection module to test whether CALL return value is checked.""" name = "Return value of an external call is not checked" swc_id = UNCHECKED_RET_VAL description = ( "Test whether CALL return value is checked. " "For direct calls, the Solidity compiler auto-generates this check. E.g.:\n" " Alice c = Alice(address);\n" " c.ping(42);\n" "Here the CALL will be followed by IZSERO(retval), if retval = ZERO then state is reverted. " "For low-level-calls this check is omitted. E.g.:\n" ' c.call.value(0)(bytes4(sha3("ping(uint256)")),1);' ) entry_point = EntryPoint.CALLBACK pre_hooks = ["STOP", "RETURN"] post_hooks = ["CALL", "DELEGATECALL", "STATICCALL", "CALLCODE"] def _execute(self, state: GlobalState) -> List[Issue]: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state: GlobalState) -> list: instruction = state.get_current_instruction() annotations = cast( List[UncheckedRetvalAnnotation], [a for a in state.get_annotations(UncheckedRetvalAnnotation)], ) if len(annotations) == 0: state.annotate(UncheckedRetvalAnnotation()) annotations = cast( List[UncheckedRetvalAnnotation], [a for a in state.get_annotations(UncheckedRetvalAnnotation)], ) retvals = annotations[0].retvals if instruction["opcode"] in ("STOP", "RETURN"): issues = [] for retval in retvals: try: """ To check whether retval is unconstrained we are checking it against retval = 0 and retval = 1 """ solver.get_transaction_sequence( state, state.world_state.constraints + [retval["retval"] == 1] ) transaction_sequence = solver.get_transaction_sequence( state, state.world_state.constraints + [retval["retval"] == 0] ) except UnsatError: continue description_tail = ( "External calls return a boolean value. If the callee halts with an exception, 'false' is " "returned and execution continues in the caller. " "The caller should check whether an exception happened and react accordingly to avoid unexpected behavior. " "For example it is often desirable to wrap external calls in require() so the transaction is reverted if the call fails." ) issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=retval["address"], bytecode=state.environment.code.bytecode, title="Unchecked return value from external call.", swc_id=UNCHECKED_RET_VAL, severity="Medium", description_head="The return value of a message call is not checked.", description_tail=description_tail, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), transaction_sequence=transaction_sequence, ) conditions = [ And(*(state.world_state.constraints + [retval["retval"] == 1])), And(*(state.world_state.constraints + [retval["retval"] == 0])), ] state.annotate( IssueAnnotation(conditions=conditions, issue=issue, detector=self) ) issues.append(issue) return issues else: log.debug("End of call, extracting retval") if state.environment.code.instruction_list[state.mstate.pc - 1][ "opcode" ] not in ["CALL", "DELEGATECALL", "STATICCALL", "CALLCODE"]: # Return is pointless with OOG. The pc does not get updated in such cases return [] return_value = state.mstate.stack[-1] retvals.append( {"address": state.instruction["address"] - 1, "retval": return_value} ) return [] detector = UncheckedRetval() ================================================ FILE: mythril/analysis/module/modules/unexpected_ether.py ================================================ """This module contains the detection code for unexpected ether balance.""" import logging from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule from mythril.analysis.module.module_helpers import is_prehook from mythril.analysis.report import Issue from mythril.analysis.solver import UnsatError, get_transaction_sequence from mythril.analysis.swc_data import UNEXPECTED_ETHER_BALANCE from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And, BitVec log = logging.getLogger(__name__) DESCRIPTION = """ Check for strict equality checks with contract balance """ class EtherBalanceCheckAnnotation(StateAnnotation): """State Annotation used if an overflow is both possible and used in the annotated path""" def __init__(self, balance: BitVec) -> None: self.balance = balance class BalanceConditionAnnotation: """""" def __init__(self, address=None) -> None: self.address = address class UnexpectedEther(DetectionModule): """This module checks for strict equality checks with contract balance.""" author = "MythX Team" plugin_license = "All rights reserved - ConsenSys" plugin_type = "Detection Module" plugin_description = DESCRIPTION plugin_default_enabled = True name = "Unexpected Ether Balance" swc_id = "132" description = DESCRIPTION pre_hooks = ["INVALID", "EQ", "RETURN", "STOP"] post_hooks = ["BALANCE"] def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state): """ :param state: :return: """ node = state.node instruction = state.get_current_instruction() if is_prehook() is False: balance = state.mstate.stack[-1] annotations = state.get_annotations(EtherBalanceCheckAnnotation) for annotation in annotations: if annotation.balance == balance: return [] state.annotate(EtherBalanceCheckAnnotation(balance)) return [] if instruction["opcode"] == "EQ": op1, op2 = state.mstate.stack[-2:] annotations = list(state.get_annotations(EtherBalanceCheckAnnotation)) op = None for annotation in annotations: if hash(annotation.balance) != hash(op1) and hash( annotation.balance ) != hash(op2): continue if hash(annotation.balance) == hash(op1): op = op1 else: op = op2 break if op is None: return [] op.annotate( BalanceConditionAnnotation( address=state.get_current_instruction()["address"] ) ) log.debug( "Equality check for contract balance in function " + node.function_name ) return [] for constraint in state.world_state.constraints: for annotation in constraint.get_annotations(BalanceConditionAnnotation): if annotation.address in self.cache: continue try: transaction_sequence = get_transaction_sequence( state, state.world_state.constraints ) except UnsatError: continue log.debug("Detected a strict equality check") title = "Strict Ether balance check" description_head = "Use of strict ether balance checking" description_tail = "Ether can be forcefully sent to this contract, This may make the contract unusable." issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=annotation.address, title=title, bytecode=state.environment.code.bytecode, swc_id=UNEXPECTED_ETHER_BALANCE, severity="Low", description_head=description_head, description_tail=description_tail, transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( conditions=[And(*state.world_state.constraints)], issue=issue, detector=self, ) ) return [issue] return [] detector = UnexpectedEther() ================================================ FILE: mythril/analysis/module/modules/user_assertions.py ================================================ """This module contains the detection code for potentially insecure low-level calls.""" import logging import eth_abi from mythril.analysis import solver from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.potential_issues import Issue from mythril.analysis.swc_data import ASSERT_VIOLATION from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And, Extract log = logging.getLogger(__name__) DESCRIPTION = """ Search for reachable user-supplied exceptions. Report a warning if an log message is emitted: 'emit AssertionFailed(string)' """ assertion_failed_hash = ( 0xB42604CB105A16C8F6DB8A41E6B00C0C1B4826465E8BC504B3EB3E88B3E6A4A0 ) mstore_pattern = "0xcafecafecafecafecafecafecafecafecafecafecafecafecafecafecafe" class UserAssertions(DetectionModule): """This module searches for user supplied exceptions: emit AssertionFailed("Error").""" name = "A user-defined assertion has been triggered" swc_id = ASSERT_VIOLATION description = DESCRIPTION entry_point = EntryPoint.CALLBACK pre_hooks = ["LOG1", "MSTORE"] def _execute(self, state: GlobalState) -> None: """ :param state: :return: """ return self._analyze_state(state) def _analyze_state(self, state: GlobalState): """ :param state: :return: """ opcode = state.get_current_instruction()["opcode"] message = None if opcode == "MSTORE": value = state.mstate.stack[-2] if value.symbolic: return [] if mstore_pattern not in hex(value.value)[:126]: return [] message = "Failed property id {}".format(Extract(15, 0, value).value) else: topic, size, mem_start = state.mstate.stack[-3:] if topic.symbolic or topic.value != assertion_failed_hash: return [] if not mem_start.symbolic and not size.symbolic: try: message = eth_abi.decode_single( "string", bytes( state.mstate.memory[ mem_start.value + 32 : mem_start.value + size.value ] ), ) except: pass try: transaction_sequence = solver.get_transaction_sequence( state, state.world_state.constraints ) if message: description_tail = ( "A user-provided assertion failed with the message '{}'".format( message ) ) else: description_tail = "A user-provided assertion failed." log.debug("MythX assertion emitted: {}".format(description_tail)) address = state.get_current_instruction()["address"] issue = Issue( contract=state.environment.active_account.contract_name, function_name=state.environment.active_function_name, address=address, swc_id=ASSERT_VIOLATION, title="Exception State", severity="Medium", description_head="A user-provided assertion failed.", description_tail=description_tail, bytecode=state.environment.code.bytecode, transaction_sequence=transaction_sequence, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), ) state.annotate( IssueAnnotation( detector=self, issue=issue, conditions=[And(*state.world_state.constraints)], ) ) return [issue] except UnsatError: log.debug("no model found") return [] detector = UserAssertions() ================================================ FILE: mythril/analysis/module/util.py ================================================ import logging from collections import defaultdict from typing import Callable, Dict, List, Mapping, Optional from mythril.analysis.module.base import DetectionModule, EntryPoint from mythril.analysis.module.loader import ModuleLoader from mythril.support.opcodes import OPCODES log = logging.getLogger(__name__) OP_CODE_LIST = OPCODES.keys() def get_detection_module_hooks( modules: List[DetectionModule], hook_type="pre" ) -> Dict[str, List[Callable]]: """Gets a dictionary with the hooks for the passed detection modules :param modules: The modules for which to retrieve hooks :param hook_type: The type of hooks to retrieve (default: "pre") :return: Dictionary with discovered hooks """ hook_dict: Mapping[str, List[Callable]] = defaultdict(list) for module in modules: hooks = module.pre_hooks if hook_type == "pre" else module.post_hooks for op_code in map(lambda x: x.upper(), hooks): # A hook can be either OP_CODE or START* # When an entry like the second is encountered we hook all opcodes that start with START if op_code in OP_CODE_LIST: hook_dict[op_code].append(module.execute) elif op_code.endswith("*"): to_register = filter(lambda x: x.startswith(op_code[:-1]), OP_CODE_LIST) for actual_hook in to_register: hook_dict[actual_hook].append(module.execute) else: log.error( "Encountered invalid hook opcode %s in module %s", op_code, module.name, ) return dict(hook_dict) def reset_callback_modules(module_names: Optional[List[str]] = None): """Clean the issue records of every callback-based module.""" modules = ModuleLoader().get_detection_modules(EntryPoint.CALLBACK, module_names) for module in modules: module.reset_module() ================================================ FILE: mythril/analysis/ops.py ================================================ """This module contains various helper methods for dealing with EVM operations.""" from enum import Enum from mythril.laser.ethereum import util from mythril.laser.smt import simplify class VarType(Enum): """An enum denoting whether a value is symbolic or concrete.""" SYMBOLIC = 1 CONCRETE = 2 class Variable: """The representation of a variable with value and type.""" def __init__(self, val, _type): """ :param val: :param _type: """ self.val = val self.type = _type def __str__(self): """ :return: """ return str(self.val) def get_variable(i): """ :param i: :return: """ try: return Variable(util.get_concrete_int(i), VarType.CONCRETE) except TypeError: return Variable(simplify(i), VarType.SYMBOLIC) class Op: """The base type for operations referencing current node and state.""" def __init__(self, node, state, state_index): """ :param node: :param state: :param state_index: """ self.node = node self.state = state self.state_index = state_index class Call(Op): """The representation of a CALL operation.""" def __init__( self, node, state, state_index, _type, to, gas, value=Variable(0, VarType.CONCRETE), data=None, ): """ :param node: :param state: :param state_index: :param _type: :param to: :param gas: :param value: :param data: """ super().__init__(node, state, state_index) self.to = to self.gas = gas self.type = _type self.value = value self.data = data ================================================ FILE: mythril/analysis/potential_issues.py ================================================ from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.report import Issue from mythril.analysis.solver import get_transaction_sequence from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import And from mythril.support.support_args import args class PotentialIssue: """Representation of a potential issue""" def __init__( self, contract, function_name, address, swc_id, title, bytecode, detector, severity=None, description_head="", description_tail="", constraints=None, ): """ :param contract: The contract :param function_name: Function name where the issue is detected :param address: The address of the issue :param swc_id: Issue's corresponding swc-id :param title: Title :param bytecode: bytecode of the issue :param detector: The detector the potential issue belongs to :param gas_used: amount of gas used :param severity: The severity of the issue :param description_head: The top part of description :param description_tail: The bottom part of the description :param constraints: The non-path related constraints for the potential issue """ self.title = title self.contract = contract self.function_name = function_name self.address = address self.description_head = description_head self.description_tail = description_tail self.severity = severity self.swc_id = swc_id self.bytecode = bytecode self.constraints = constraints or [] self.detector = detector class PotentialIssuesAnnotation(StateAnnotation): def __init__(self): self.potential_issues = [] @property def search_importance(self): return 10 * len(self.potential_issues) def get_potential_issues_annotation(state: GlobalState) -> PotentialIssuesAnnotation: """ Returns the potential issues annotation of the given global state, and creates one if one does not already exist. :param state: The global state :return: """ for annotation in state.annotations: if isinstance(annotation, PotentialIssuesAnnotation): return annotation annotation = PotentialIssuesAnnotation() state.annotate(annotation) return annotation def check_potential_issues(state: GlobalState) -> None: """ Called at the end of a transaction, checks potential issues, and adds valid issues to the detector. :param state: The final global state of a transaction :return: """ annotation = get_potential_issues_annotation(state) unsat_potential_issues = [] for potential_issue in annotation.potential_issues: try: transaction_sequence = get_transaction_sequence( state, state.world_state.constraints + potential_issue.constraints ) except UnsatError: unsat_potential_issues.append(potential_issue) continue issue = Issue( contract=potential_issue.contract, function_name=potential_issue.function_name, address=potential_issue.address, title=potential_issue.title, bytecode=potential_issue.bytecode, swc_id=potential_issue.swc_id, gas_used=(state.mstate.min_gas_used, state.mstate.max_gas_used), severity=potential_issue.severity, description_head=potential_issue.description_head, description_tail=potential_issue.description_tail, transaction_sequence=transaction_sequence, ) state.annotate( IssueAnnotation( detector=potential_issue.detector, issue=issue, conditions=[ And(*(state.world_state.constraints + potential_issue.constraints)) ], ) ) if args.use_issue_annotations is False: potential_issue.detector.issues.append(issue) potential_issue.detector.update_cache([issue]) annotation.potential_issues = unsat_potential_issues ================================================ FILE: mythril/analysis/report.py ================================================ """This module provides classes that make up an issue report.""" import json import logging import operator import re try: from eth_abi import decode except ImportError: from eth_abi import decode_abi as decode import hashlib from time import time from typing import Any, Dict, Iterable, List, Optional from jinja2 import Environment, PackageLoader from mythril.analysis.swc_data import SWC_TO_TITLE from mythril.laser.execution_info import ExecutionInfo from mythril.solidity.soliditycontract import SolidityContract from mythril.support.signatures import SignatureDB from mythril.support.source_support import Source from mythril.support.start_time import StartTime from mythril.support.support_utils import get_code_hash log = logging.getLogger(__name__) class Issue: """Representation of an issue and its location.""" def __init__( self, contract: str, function_name: str, address: int, swc_id: str, title: str, bytecode: str, gas_used=(None, None), severity=None, description_head="", description_tail="", transaction_sequence=None, source_location=None, ): """ :param contract: The contract :param function_name: Function name where the issue is detected :param address: The address of the issue :param swc_id: Issue's corresponding swc-id :param title: Title :param bytecode: bytecode of the issue :param gas_used: amount of gas used :param severity: The severity of the issue :param description_head: The top part of description :param description_tail: The bottom part of the description :param transaction_sequence: The transaction sequence """ self.title = title self.contract = contract self.function = function_name self.address = address self.description_head = description_head self.description_tail = description_tail self.description = "%s\n%s" % (description_head, description_tail) self.severity = severity self.swc_id = swc_id self.min_gas_used, self.max_gas_used = gas_used self.filename = None self.code = None self.lineno = None self.source_mapping = None self.discovery_time = time() - StartTime().global_start_time self.bytecode_hash = get_code_hash(bytecode) self.transaction_sequence = transaction_sequence self.source_location = source_location @property def transaction_sequence_users(self): """Returns the transaction sequence without pre-generated block data""" return self.transaction_sequence @property def transaction_sequence_jsonv2(self): """Returns the transaction sequence as a json string with pre-generated block data""" return ( self.add_block_data(self.transaction_sequence) if self.transaction_sequence else None ) @staticmethod def add_block_data(transaction_sequence: Dict): """Adds sane block data to a transaction_sequence""" for step in transaction_sequence["steps"]: step["gasLimit"] = "0x7d000" step["gasPrice"] = "0x773594000" step["blockCoinbase"] = "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb" step["blockDifficulty"] = "0xa7d7343662e26" step["blockGasLimit"] = "0x7d0000" step["blockNumber"] = "0x66e393" step["blockTime"] = "0x5bfa4639" return transaction_sequence @property def as_dict(self): """ :return: """ issue = { "title": self.title, "swc-id": self.swc_id, "contract": self.contract, "description": self.description, "function": self.function, "severity": self.severity, "address": self.address, "tx_sequence": self.transaction_sequence, "min_gas_used": self.min_gas_used, "max_gas_used": self.max_gas_used, "sourceMap": self.source_mapping, } if self.filename and self.lineno: issue["filename"] = self.filename issue["lineno"] = self.lineno if self.code: issue["code"] = self.code return issue def _set_internal_compiler_error(self): """ Adds the false positive to description and changes severity to low """ self.severity = "Low" self.description_tail += ( " This issue is reported for internal compiler generated code." ) self.description = "%s\n%s" % (self.description_head, self.description_tail) self.code = "" def add_code_info(self, contract): """ :param contract: """ if self.address and isinstance(contract, SolidityContract): is_constructor = False if self.function == "constructor": is_constructor = True if self.source_location: codeinfo = contract.get_source_info( self.source_location, constructor=is_constructor ) else: codeinfo = contract.get_source_info( self.address, constructor=is_constructor ) if codeinfo is None: self.source_mapping = self.address self.filename = "Internal File" return self.filename = codeinfo.filename self.code = codeinfo.code self.lineno = codeinfo.lineno if self.lineno is None: self._set_internal_compiler_error() self.source_mapping = codeinfo.solc_mapping else: self.source_mapping = self.address @staticmethod def decode_bytes(val): if isinstance(val, bytes): return val.decode() elif isinstance(val, list) or isinstance(val, tuple): return [Issue.decode_bytes(x) for x in val] else: return val def resolve_function_names(self): """Resolves function names for each step""" if ( self.transaction_sequence is None or "steps" not in self.transaction_sequence ): return signatures = SignatureDB() for step in self.transaction_sequence["steps"]: _hash = step["input"][:10] try: sig = signatures.get(_hash) # TODO: Check other mythx tools for dependency before supporting multiple possible function names if len(sig) > 0: step["name"] = sig[0] step["resolved_input"] = Issue.resolve_input( step["calldata"], sig[0] ) if step["resolved_input"] is not None: step["resolved_input"] = list(step["resolved_input"]) for i, val in enumerate(step["resolved_input"]): step["resolved_input"][i] = Issue.decode_bytes(val) step["resolved_input"] = tuple(step["resolved_input"]) else: step["name"] = "unknown" except ValueError: step["name"] = "unknown" @staticmethod def resolve_input(data, function_name): """ Adds decoded calldate to the tx sequence. """ data = data[10:] # Eliminates the first and last brackets # Since signature such as func((bytes32,bytes32,uint8)[],(address[],uint32)) are valid type_info = function_name[function_name.find("(") + 1 : -1] type_info = re.split(r",\s*(?![^()]*\))", type_info) if len(data) % 64 > 0: data += "0" * (64 - len(data) % 64) try: decoded_output = decode(type_info, bytes.fromhex(data)) decoded_output = tuple( convert_bytes(item) if isinstance(item, (bytes, Iterable)) else item for item in decoded_output ) return decoded_output except Exception: return None def convert_bytes(item): """ Converts bytes to a serializable format. Handles nested iterables. """ if isinstance(item, bytes): return item.hex() elif isinstance(item, Iterable) and not isinstance(item, (str, bytes)): # Recursively apply convert_bytes to each item in the iterable return type(item)(convert_bytes(subitem) for subitem in item) else: return item class Report: """A report containing the content of multiple issues.""" environment = Environment( loader=PackageLoader("mythril.analysis"), trim_blocks=True ) def __init__( self, contracts=None, exceptions=None, execution_info: Optional[List[ExecutionInfo]] = None, ): """ :param contracts: :param exceptions: """ self.issues: Dict[bytes, Issue] = {} self.solc_version = "" self.meta: Dict[str, Any] = {} self.source = Source() self.source.get_source_from_contracts_list(contracts) self.exceptions = exceptions or [] self.execution_info = execution_info or [] def sorted_issues(self): """ :return: """ issue_list = [issue.as_dict for key, issue in self.issues.items()] return sorted(issue_list, key=operator.itemgetter("address", "title")) def append_issue(self, issue): """ :param issue: """ m = hashlib.md5() m.update( (issue.contract + issue.function + str(issue.address) + issue.title).encode( "utf-8" ) ) issue.resolve_function_names() self.issues[m.digest()] = issue def as_text(self): """ :return: """ name = self._file_name() template = Report.environment.get_template("report_as_text.jinja2") return template.render(filename=name, issues=self.sorted_issues()) def as_json(self): """ :return: """ result = {"success": True, "error": None, "issues": self.sorted_issues()} return json.dumps(result, sort_keys=True) def _get_exception_data(self) -> dict: if not self.exceptions: return {} logs: List[Dict] = [] for exception in self.exceptions: logs += [{"level": "error", "hidden": True, "msg": exception}] return {"logs": logs} def as_swc_standard_format(self): """Format defined for integration and correlation. :return: """ # Setup issues _issues = [] for _, issue in self.issues.items(): idx = self.source.get_source_index(issue.bytecode_hash) try: title = SWC_TO_TITLE[issue.swc_id] except KeyError: title = "Unspecified Security Issue" extra = {"discoveryTime": int(issue.discovery_time * 10**9)} if issue.transaction_sequence_jsonv2: extra["testCases"] = [issue.transaction_sequence_jsonv2] _issues.append( { "swcID": "SWC-" + issue.swc_id, "swcTitle": title, "description": { "head": issue.description_head, "tail": issue.description_tail, }, "severity": issue.severity, "locations": [{"sourceMap": "%d:1:%d" % (issue.address, idx)}], "extra": extra, } ) # Setup meta meta_data = self.meta # Add logs to meta meta_data.update(self._get_exception_data()) # Add execution info to meta analysis_duration = int( round((time() - StartTime().global_start_time) * (10**9)) ) meta_data["mythril_execution_info"] = {"analysis_duration": analysis_duration} for execution_info in self.execution_info: meta_data["mythril_execution_info"].update(execution_info.as_dict()) result = [ { "issues": _issues, "sourceType": self.source.source_type, "sourceFormat": self.source.source_format, "sourceList": self.source.source_list, "meta": meta_data, } ] return json.dumps(result, sort_keys=True) def as_markdown(self): """ :return: """ filename = self._file_name() template = Report.environment.get_template("report_as_markdown.jinja2") return template.render(filename=filename, issues=self.sorted_issues()) def _file_name(self): """ :return: """ if len(self.issues.values()) > 0: return list(self.issues.values())[0].filename ================================================ FILE: mythril/analysis/security.py ================================================ """This module contains functionality for hooking in detection modules and executing them.""" import logging from typing import List, Optional from mythril.analysis.module import ModuleLoader, reset_callback_modules from mythril.analysis.module.base import EntryPoint from mythril.analysis.report import Issue log = logging.getLogger(__name__) def retrieve_callback_issues(white_list: Optional[List[str]] = None) -> List[Issue]: """Get the issues discovered by callback type detection modules""" issues: List[Issue] = [] for module in ModuleLoader().get_detection_modules( entry_point=EntryPoint.CALLBACK, white_list=white_list ): log.debug("Retrieving results for " + module.name) issues += module.issues reset_callback_modules(module_names=white_list) return issues def fire_lasers(statespace, white_list: Optional[List[str]] = None) -> List[Issue]: """Fire lasers at analysed statespace object :param statespace: Symbolic statespace to analyze :param white_list: Optionally whitelist modules to use for the analysis :return: Discovered issues """ log.info("Starting analysis") issues: List[Issue] = [] for module in ModuleLoader().get_detection_modules( entry_point=EntryPoint.POST, white_list=white_list ): log.info("Executing " + module.name) issues += module.execute(statespace) issues += retrieve_callback_issues(white_list) return issues ================================================ FILE: mythril/analysis/solver.py ================================================ """This module contains analysis module helpers to solve path constraints.""" import logging from typing import Any, Dict, List, Tuple, Union import z3 from z3 import FuncInterp from mythril.exceptions import UnsatError from mythril.laser.ethereum.function_managers import ( keccak_function_manager, ) from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.transaction import BaseTransaction from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, ) from mythril.laser.smt import UGE, symbol_factory from mythril.support.model import get_model log = logging.getLogger(__name__) z3.set_option( max_args=10000000, max_lines=1000000, max_depth=10000000, max_visited=1000000 ) def pretty_print_model(model): """Pretty prints a z3 model :param model: :return: """ ret = "" for d in model.decls(): if isinstance(model[d], FuncInterp): condition = model[d].as_list() ret += "%s: %s\n" % (d.name(), condition) continue try: condition = "0x%x" % model[d].as_long() except: condition = str(z3.simplify(model[d])) ret += "%s: %s\n" % (d.name(), condition) return ret def get_transaction_sequence( global_state: GlobalState, constraints: Constraints ) -> Dict[str, Any]: """Generate concrete transaction sequence. Note: This function only considers the constraints in constraint argument, which in some cases is expected to differ from global_state's constraints :param global_state: GlobalState to generate transaction sequence for :param constraints: list of constraints used to generate transaction sequence """ transaction_sequence = global_state.world_state.transaction_sequence concrete_transactions = [] tx_constraints, minimize = _set_minimisation_constraints( transaction_sequence, constraints.copy(), [], 5000, global_state.world_state ) try: model = get_model(tx_constraints, minimize=minimize) except UnsatError: raise UnsatError if isinstance(transaction_sequence[0], ContractCreationTransaction): initial_world_state = transaction_sequence[0].prev_world_state else: initial_world_state = transaction_sequence[0].world_state initial_accounts = initial_world_state.accounts for transaction in transaction_sequence: concrete_transaction = _get_concrete_transaction(model, transaction) concrete_transactions.append(concrete_transaction) min_price_dict: Dict[str, int] = {} for address in initial_accounts.keys(): min_price_dict[address] = model.eval( initial_world_state.starting_balances[ symbol_factory.BitVecVal(address, 256) ].raw, model_completion=True, ).as_long() concrete_initial_state = _get_concrete_state(initial_accounts, min_price_dict) if isinstance(transaction_sequence[0], ContractCreationTransaction): code = transaction_sequence[0].code _replace_with_actual_sha(concrete_transactions, model, code) else: _replace_with_actual_sha(concrete_transactions, model) _add_calldata_placeholder(concrete_transactions, transaction_sequence) steps = {"initialState": concrete_initial_state, "steps": concrete_transactions} return steps def _add_calldata_placeholder( concrete_transactions: List[Dict[str, str]], transaction_sequence: List[BaseTransaction], ): """ Adds a calldata placeholder into the concrete transactions :param concrete_transactions: :param transaction_sequence: :return: """ for tx in concrete_transactions: tx["calldata"] = tx["input"] if not isinstance(transaction_sequence[0], ContractCreationTransaction): return if isinstance(transaction_sequence[0].code.bytecode, tuple): code_len = len(transaction_sequence[0].code.bytecode) * 2 else: code_len = len(transaction_sequence[0].code.bytecode) concrete_transactions[0]["calldata"] = concrete_transactions[0]["input"][ code_len + 2 : ] def _replace_with_actual_sha( concrete_transactions: List[Dict[str, str]], model: z3.Model, code=None ): concrete_hashes = keccak_function_manager.get_concrete_hash_data(model) for tx in concrete_transactions: if keccak_function_manager.hash_matcher not in tx["input"]: continue if code is not None and code.bytecode in tx["input"]: s_index = len(code.bytecode) + 2 else: s_index = 10 for i in range(s_index, len(tx["input"])): data_slice = tx["input"][i : i + 64] if ( keccak_function_manager.hash_matcher not in data_slice or len(data_slice) != 64 ): continue find_input = symbol_factory.BitVecVal(int(data_slice, 16), 256) input_ = None for size in concrete_hashes: _, inverse = keccak_function_manager.store_function[size] if find_input.value not in concrete_hashes[size]: continue input_ = symbol_factory.BitVecVal( model.eval(inverse(find_input).raw).as_long(), size ) if input_ is None: continue keccak = keccak_function_manager.find_concrete_keccak(input_) hex_keccak = hex(keccak.value)[2:] if len(hex_keccak) != 64: hex_keccak = "0" * (64 - len(hex_keccak)) + hex_keccak tx["input"] = tx["input"][:s_index] + tx["input"][s_index:].replace( tx["input"][i : 64 + i], hex_keccak ) def _get_concrete_state( initial_accounts: Dict, min_price_dict: Dict[str, int] ) -> Dict[str, Dict]: """Gets a concrete state""" accounts = {} for address, account in initial_accounts.items(): # Skip empty default account data: Dict[str, Union[int, str]] = {} data["nonce"] = account.nonce data["code"] = account.serialised_code() data["storage"] = str(account.storage) data["balance"] = hex(min_price_dict.get(address, 0)) accounts[hex(address)] = data return {"accounts": accounts} def _get_concrete_transaction(model: z3.Model, transaction: BaseTransaction): """Gets a concrete transaction from a transaction and z3 model""" # Get concrete values from transaction address = hex(transaction.callee_account.address.value) value = model.eval(transaction.call_value.raw, model_completion=True).as_long() caller = "0x" + ( "%x" % model.eval(transaction.caller.raw, model_completion=True).as_long() ).zfill(40) input_ = "" if isinstance(transaction, ContractCreationTransaction): address = "" input_ += transaction.code.bytecode input_ += "".join( [ hex(b)[2:] if len(hex(b)) % 2 == 0 else "0" + hex(b)[2:] for b in transaction.call_data.concrete(model) ] ) # Create concrete transaction dict concrete_transaction: Dict[str, str] = dict() concrete_transaction["input"] = "0x" + input_ concrete_transaction["value"] = "0x%x" % value # Fixme: base origin assignment on origin symbol concrete_transaction["origin"] = caller concrete_transaction["address"] = "%s" % address return concrete_transaction def _set_minimisation_constraints( transaction_sequence, constraints, minimize, max_size, world_state ) -> Tuple[Constraints, tuple]: """Set constraints that minimise key transaction values Constraints generated: - Upper bound on calldata size - Minimisation of call value's and calldata sizes :param transaction_sequence: Transaction for which the constraints should be applied :param constraints: The constraints array which should contain any added constraints :param minimize: The minimisation array which should contain any variables that should be minimised :param max_size: The max size of the calldata array :return: updated constraints, minimize """ for transaction in transaction_sequence: # Set upper bound on calldata size max_calldata_size = symbol_factory.BitVecVal(max_size, 256) constraints.append(UGE(max_calldata_size, transaction.call_data.calldatasize)) # Minimize minimize.append(transaction.call_data.calldatasize) minimize.append(transaction.call_value) constraints.append( UGE( symbol_factory.BitVecVal(1000000000000000000000, 256), world_state.starting_balances[transaction.caller], ) ) for account in world_state.accounts.values(): # Lazy way to prevent overflows and to ensure "reasonable" balances # Each account starts with less than 100 ETH constraints.append( UGE( symbol_factory.BitVecVal(100000000000000000000, 256), world_state.starting_balances[account.address], ) ) return constraints, tuple(minimize) ================================================ FILE: mythril/analysis/swc_data.py ================================================ """This module maps SWC IDs to their registry equivalents.""" DEFAULT_FUNCTION_VISIBILITY = "100" INTEGER_OVERFLOW_AND_UNDERFLOW = "101" OUTDATED_COMPILER_VERSION = "102" FLOATING_PRAGMA = "103" UNCHECKED_RET_VAL = "104" UNPROTECTED_ETHER_WITHDRAWAL = "105" UNPROTECTED_SELFDESTRUCT = "106" REENTRANCY = "107" DEFAULT_STATE_VARIABLE_VISIBILITY = "108" UNINITIALIZED_STORAGE_POINTER = "109" ASSERT_VIOLATION = "110" DEPRECATED_FUNCTIONS_USAGE = "111" DELEGATECALL_TO_UNTRUSTED_CONTRACT = "112" MULTIPLE_SENDS = "113" TX_ORDER_DEPENDENCE = "114" TX_ORIGIN_USAGE = "115" TIMESTAMP_DEPENDENCE = "116" SIGNATURE_MALLEABILITY = "117" INCORRECT_CONSTRUCTOR_NAME = "118" SHADOWING_STATE_VARIABLES = "119" WEAK_RANDOMNESS = "120" SIGNATURE_REPLAY = "121" IMPROPER_VERIFICATION_BASED_ON_MSG_SENDER = "122" REQUIREMENT_VIOLATION = "123" WRITE_TO_ARBITRARY_STORAGE = "124" INCORRECT_INHERITANCE_ORDER = "125" ARBITRARY_JUMP = "127" DOS_WITH_BLOCK_GAS_LIMIT = "128" TYPOGRAPHICAL_ERROR = "129" UNEXPECTED_ETHER_BALANCE = "132" EFFECT_FREE_CODE = "135" SWC_TO_TITLE = { "100": "Function Default Visibility", "101": "Integer Overflow and Underflow", "102": "Outdated Compiler Version", "103": "Floating Pragma", "104": "Unchecked Call Return Value", "105": "Unprotected Ether Withdrawal", "106": "Unprotected SELFDESTRUCT Instruction", "107": "Reentrancy", "108": "State Variable Default Visibility", "109": "Uninitialized Storage Pointer", "110": "Assert Violation", "111": "Use of Deprecated Solidity Functions", "112": "Delegatecall to Untrusted Callee", "113": "DoS with Failed Call", "114": "Transaction Order Dependence", "115": "Authorization through tx.origin", "116": "Timestamp Dependence", "117": "Signature Malleability", "118": "Incorrect Constructor Name", "119": "Shadowing State Variables", "120": "Weak Sources of Randomness from Chain Attributes", "121": "Missing Protection against Signature Replay Attacks", "122": "Lack of Proper Signature Verification", "123": "Requirement Violation", "124": "Write to Arbitrary Storage Location", "125": "Incorrect Inheritance Order", "127": "Arbitrary Jump with Function Type Variable", "128": "DoS With Block Gas Limit", "129": "Typographical Error", "132": "Unexpected Ether Balance", "135": "Effect Free Code", } ================================================ FILE: mythril/analysis/symbolic.py ================================================ """This module contains a wrapper around LASER for extended analysis purposes.""" from typing import List, Optional, Type, Union from mythril.analysis.module import EntryPoint, ModuleLoader, get_detection_module_hooks from mythril.laser.ethereum import svm from mythril.laser.ethereum.natives import PRECOMPILE_COUNT from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.strategy.basic import ( BasicSearchStrategy, BreadthFirstSearchStrategy, DepthFirstSearchStrategy, ReturnRandomNaivelyStrategy, ReturnWeightedRandomStrategy, ) from mythril.laser.ethereum.strategy.beam import BeamSearch from mythril.laser.ethereum.strategy.constraint_strategy import DelayConstraintStrategy from mythril.laser.ethereum.strategy.extensions.bounded_loops import ( BoundedLoopsStrategy, ) from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.ethereum.tx_prioritiser import RfTxPrioritiser from mythril.laser.execution_info import ExecutionInfo from mythril.laser.plugin.loader import LaserPluginLoader from mythril.laser.plugin.plugins import ( CallDepthLimitBuilder, CoverageMetricsPluginBuilder, CoveragePluginBuilder, DependencyPrunerBuilder, InstructionProfilerBuilder, MutationPrunerBuilder, StateMergePluginBuilder, SymbolicSummaryPluginBuilder, ) from mythril.laser.smt import BitVec, symbol_factory from mythril.solidity.soliditycontract import EVMContract, SolidityContract from mythril.support.support_args import args from .ops import Call, VarType, get_variable class SymExecWrapper: """Wrapper class for the LASER Symbolic virtual machine. Symbolically executes the code and does a bit of pre-analysis for convenience. """ def __init__( self, contract, address: Union[int, str, BitVec], strategy: str, dynloader=None, max_depth: int = 22, execution_timeout: Optional[int] = None, loop_bound: int = 3, create_timeout: Optional[int] = None, transaction_count: int = 2, modules: Optional[List[str]] = None, compulsory_statespace: bool = True, disable_dependency_pruning: bool = False, run_analysis_modules: bool = True, custom_modules_directory: str = "", ): """ :param contract: Contract to symbolically execute :param address: Address of the contract to symbolically execute :param strategy: Execution strategy to use (bfs, dfs, etc) :param dynloader: Dynamic Loader :param max_depth: Max analysis depth :param execution_timeout: Timeout for the entire analysis :param create_timeout: Timeout for the creation transaction :param transaction_count: Number of transactions to symbolically execute :param modules: Analysis modules to run during analysis :param compulsory_statespace: Boolean indicating whether or not the statespace should be saved :param iprof: Instruction Profiler :param disable_dependency_pruning: Boolean indicating whether dependency pruning should be disabled :param run_analysis_modules: Boolean indicating whether analysis modules should be executed :param enable_coverage_strategy: Boolean indicating whether the coverage strategy should be enabled :param custom_modules_directory: The directory to read custom analysis modules from """ if isinstance(address, str): address = symbol_factory.BitVecVal(int(address, 16), 256) if isinstance(address, int): address = symbol_factory.BitVecVal(address, 256) beam_width = None if strategy == "dfs": s_strategy: Type[BasicSearchStrategy] = DepthFirstSearchStrategy elif strategy == "bfs": s_strategy = BreadthFirstSearchStrategy elif strategy == "naive-random": s_strategy = ReturnRandomNaivelyStrategy elif strategy == "weighted-random": s_strategy = ReturnWeightedRandomStrategy elif "beam-search: " in strategy: beam_width = int(strategy.split("beam-search: ")[1]) s_strategy = BeamSearch elif "pending" in strategy: s_strategy = DelayConstraintStrategy else: raise ValueError("Invalid strategy argument supplied") if args.incremental_txs is False: tx_strategy = RfTxPrioritiser(contract) else: tx_strategy = None creator_account = Account( hex(ACTORS.creator.value), "", dynamic_loader=None, contract_name=None ) attacker_account = Account( hex(ACTORS.attacker.value), "", dynamic_loader=None, contract_name=None ) requires_statespace = ( compulsory_statespace or len(ModuleLoader().get_detection_modules(EntryPoint.POST, modules)) > 0 ) if not contract.creation_code: self.accounts = {hex(ACTORS.attacker.value): attacker_account} else: self.accounts = { hex(ACTORS.creator.value): creator_account, hex(ACTORS.attacker.value): attacker_account, } self.laser = svm.LaserEVM( dynamic_loader=dynloader, max_depth=max_depth, execution_timeout=execution_timeout, strategy=s_strategy, create_timeout=create_timeout, transaction_count=transaction_count, requires_statespace=requires_statespace, beam_width=beam_width, tx_strategy=tx_strategy, ) if loop_bound is not None: self.laser.extend_strategy( BoundedLoopsStrategy, loop_bound=loop_bound, beam_width=beam_width ) plugin_loader = LaserPluginLoader() plugin_loader.load(CoverageMetricsPluginBuilder()) if args.enable_state_merge: plugin_loader.load(StateMergePluginBuilder()) if not args.disable_coverage_strategy: plugin_loader.load(CoveragePluginBuilder()) if not args.disable_mutation_pruner: plugin_loader.load(MutationPrunerBuilder()) if not args.disable_iprof: plugin_loader.load(InstructionProfilerBuilder()) if args.enable_summaries: plugin_loader.load(SymbolicSummaryPluginBuilder()) plugin_loader.load(CallDepthLimitBuilder()) plugin_loader.add_args( "call-depth-limit", call_depth_limit=args.call_depth_limit ) if not disable_dependency_pruning: plugin_loader.load(DependencyPrunerBuilder()) plugin_loader.instrument_virtual_machine(self.laser, None) world_state = WorldState() for account in self.accounts.values(): world_state.put_account(account) if run_analysis_modules: analysis_modules = ModuleLoader().get_detection_modules( EntryPoint.CALLBACK, modules ) self.laser.register_hooks( hook_type="pre", hook_dict=get_detection_module_hooks(analysis_modules, hook_type="pre"), ) self.laser.register_hooks( hook_type="post", hook_dict=get_detection_module_hooks( analysis_modules, hook_type="post" ), ) if isinstance(contract, SolidityContract) and create_timeout != 0: self.laser.sym_exec( creation_code=contract.creation_code, contract_name=contract.name, world_state=world_state, ) elif isinstance(contract, EVMContract) and contract.creation_code: self.laser.sym_exec( creation_code=contract.creation_code, contract_name=contract.name, world_state=world_state, ) else: account = Account( address, contract.disassembly, dynamic_loader=dynloader, contract_name=contract.name, balances=world_state.balances, concrete_storage=( True if (dynloader is not None and dynloader.active) else False ), ) # concrete_storage can get overridden by global args if dynloader is not None: if isinstance(address, int): try: _balance = dynloader.read_balance( "{0:#0{1}x}".format(address, 42) ) account.set_balance(_balance) except: # Initial balance will be a symbolic variable pass elif isinstance(address, str): try: _balance = dynloader.read_balance(address) account.set_balance(_balance) except: # Initial balance will be a symbolic variable pass elif isinstance(address, BitVec): try: _balance = dynloader.read_balance( "{0:#0{1}x}".format(address.value, 42) ) account.set_balance(_balance) except: # Initial balance will be a symbolic variable pass world_state.put_account(account) self.laser.sym_exec(world_state=world_state, target_address=address.value) if not requires_statespace: return self.nodes = self.laser.nodes self.edges = self.laser.edges # Parse calls to make them easily accessible self.calls: List[Call] = [] for key in self.nodes: state_index = 0 for state in self.nodes[key].states: instruction = state.get_current_instruction() op = instruction["opcode"] if op in ("CALL", "CALLCODE", "DELEGATECALL", "STATICCALL"): stack = state.mstate.stack if op in ("CALL", "CALLCODE"): gas, to, value, meminstart, meminsz, _, _ = ( get_variable(stack[-1]), get_variable(stack[-2]), get_variable(stack[-3]), get_variable(stack[-4]), get_variable(stack[-5]), get_variable(stack[-6]), get_variable(stack[-7]), ) if ( to.type == VarType.CONCRETE and 0 < to.val <= PRECOMPILE_COUNT ): # ignore prebuilts continue if ( meminstart.type == VarType.CONCRETE and meminsz.type == VarType.CONCRETE ): self.calls.append( Call( self.nodes[key], state, state_index, op, to, gas, value, state.mstate.memory[ meminstart.val : meminsz.val + meminstart.val ], ) ) else: self.calls.append( Call( self.nodes[key], state, state_index, op, to, gas, value, ) ) else: gas, to, meminstart, meminsz, _, _ = ( get_variable(stack[-1]), get_variable(stack[-2]), get_variable(stack[-3]), get_variable(stack[-4]), get_variable(stack[-5]), get_variable(stack[-6]), ) self.calls.append( Call(self.nodes[key], state, state_index, op, to, gas) ) state_index += 1 @property def execution_info(self) -> List[ExecutionInfo]: return self.laser.execution_info ================================================ FILE: mythril/analysis/templates/callgraph.html ================================================ Call Graph {% if not phrackify %} {% else %} {% endif %}

{{ title }}

================================================ FILE: mythril/analysis/templates/report_as_markdown.jinja2 ================================================ # Analysis results for {{ filename }} {% if issues %} {% for issue in issues %} ## {{ issue.title }} - SWC ID: {{ issue['swc-id'] }} - Severity: {{ issue.severity }} - Contract: {{ issue.contract | default("Unknown") }} {% if issue.function %} - Function name: `{{ issue.function }}` {% endif %} - PC address: {{ issue.address }} {% if issue.min_gas_used or issue.max_gas_used %} - Estimated Gas Usage: {{ issue.min_gas_used }} - {{ issue.max_gas_used }} {% endif %} ### Description {{ issue.description.rstrip() }} {% if issue.filename and issue.lineno %} In file: {{ issue.filename }}:{{ issue.lineno }} {% elif issue.filename %} In file: {{ issue.filename }} {% endif %} {% if issue.code %} ### Code ``` {{ issue.code }} ``` {% endif %} {% if issue.tx_sequence %} ### Initial State: {% for key, value in issue.tx_sequence.initialState.accounts.items() %} Account: {% if key == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}[CREATOR]{% elif key == "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" %}[ATTACKER]{% else %}[SOMEGUY]{% endif %}, balance: {{value.balance}}, nonce:{{value.nonce}}, storage:{{value.storage}} {% endfor %} ### Transaction Sequence {% for step in issue.tx_sequence.steps %} {% if step == issue.tx_sequence.steps[0] and step.input != "0x" and step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %} Caller: [CREATOR], calldata: {{ step.calldata }}, {% if step.resolved_input is not none %}decoded_data: {{ step.resolved_input }}, {% endif %}value: {{ step.value }} {% else %} Caller: {% if step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}[CREATOR]{% elif step.origin == "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" %}[ATTACKER]{% else %}[SOMEGUY]{% endif %}, function: {{ step.name }}, txdata: {{ step.input }}, {% if step.resolved_input is not none %}decoded_data: {{ step.resolved_input }}, {% endif %}value: {{ step.value }} {% endif %} {% endfor %} {% endif %} {% endfor %} {% else %} The analysis was completed successfully. No issues were detected. {% endif %} ================================================ FILE: mythril/analysis/templates/report_as_text.jinja2 ================================================ {% if issues %} {% for issue in issues %} ==== {{ issue.title }} ==== SWC ID: {{ issue['swc-id'] }} Severity: {{ issue.severity }} Contract: {{ issue.contract | default("Unknown") }} {% if issue.function %} Function name: {{ issue.function }} {% endif %} PC address: {{ issue.address }} {% if issue.min_gas_used or issue.max_gas_used %} Estimated Gas Usage: {{ issue.min_gas_used }} - {{ issue.max_gas_used }} {% endif %} {{ issue.description }} -------------------- {% if issue.filename and issue.lineno %} In file: {{ issue.filename }}:{{ issue.lineno }} {% endif %} {% if issue.code %} {{ issue.code }} -------------------- {% endif %} {% if issue.tx_sequence %} Initial State: {% for key, value in issue.tx_sequence.initialState.accounts.items() %} Account: {% if key == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}[CREATOR]{% elif key == "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" %}[ATTACKER]{% else %}[SOMEGUY]{% endif %}, balance: {{value.balance}}, nonce:{{value.nonce}}, storage:{{value.storage}} {% endfor %} Transaction Sequence: {% for step in issue.tx_sequence.steps %} {% if step == issue.tx_sequence.steps[0] and step.address == "" and step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %} Caller: [CREATOR], calldata: {{ step.calldata }}, {% if step.resolved_input is not none %}decoded_data: {{ step.resolved_input }}, {% endif %}value: {{ step.value }} {% else %} Caller: {% if step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}[CREATOR]{% elif step.origin == "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" %}[ATTACKER]{% else %}[SOMEGUY]{% endif %}, function: {{ step.name }}, txdata: {{ step.input }}, {% if step.resolved_input is not none %}decoded_data: {{ step.resolved_input }}, {% endif %}value: {{ step.value }} {% endif %} {% endfor %} {% endif %} {% endfor %} {% else %} The analysis was completed successfully. No issues were detected. {% endif %} ================================================ FILE: mythril/analysis/traceexplore.py ================================================ """This module provides a function to convert a state space into a set of state nodes and transition edges.""" import re from z3 import Z3Exception from mythril.laser.ethereum.svm import NodeFlags from mythril.laser.smt import simplify colors = [ { "border": "#26996f", "background": "#2f7e5b", "highlight": {"border": "#fff", "background": "#28a16f"}, }, { "border": "#9e42b3", "background": "#842899", "highlight": {"border": "#fff", "background": "#933da6"}, }, { "border": "#b82323", "background": "#991d1d", "highlight": {"border": "#fff", "background": "#a61f1f"}, }, { "border": "#4753bf", "background": "#3b46a1", "highlight": {"border": "#fff", "background": "#424db3"}, }, { "border": "#26996f", "background": "#2f7e5b", "highlight": {"border": "#fff", "background": "#28a16f"}, }, { "border": "#9e42b3", "background": "#842899", "highlight": {"border": "#fff", "background": "#933da6"}, }, { "border": "#b82323", "background": "#991d1d", "highlight": {"border": "#fff", "background": "#a61f1f"}, }, { "border": "#4753bf", "background": "#3b46a1", "highlight": {"border": "#fff", "background": "#424db3"}, }, ] def get_serializable_statespace(statespace): """ :param statespace: :return: """ nodes = [] edges = [] color_map = {} i = 0 for k in statespace.accounts: color_map[statespace.accounts[k].contract_name] = colors[i] i += 1 for node_key in statespace.nodes: node = statespace.nodes[node_key] code = node.get_cfg_dict()["code"] code = re.sub("([0-9a-f]{8})[0-9a-f]+", lambda m: m.group(1) + "(...)", code) if NodeFlags.FUNC_ENTRY in node.flags: code = re.sub("JUMPDEST", node.function_name, code) code_split = code.split("\\n") truncated_code = ( code if (len(code_split) < 7) else "\\n".join(code_split[:6]) + "\\n(click to expand +)" ) try: color = color_map[node.get_cfg_dict()["contract_name"]] except KeyError: color = colors[i] i += 1 color_map[node.get_cfg_dict()["contract_name"]] = color def get_state_accounts(node_state): """ :param node_state: :return: """ state_accounts = [] for key in node_state.accounts: account = node_state.accounts[key].as_dict account.pop("code", None) account["balance"] = str(account["balance"]) storage = {} for storage_key in account["storage"].printable_storage: storage[str(storage_key)] = str(account["storage"][storage_key]) state_accounts.append({"address": key, "storage": storage}) return state_accounts states = [ {"machine": x.mstate.as_dict, "accounts": get_state_accounts(x)} for x in node.states ] for state in states: state["machine"]["stack"] = [str(s) for s in state["machine"]["stack"]] state["machine"]["memory"] = [ str(m) for m in state["machine"]["memory"][: len(state["machine"]["memory"])] ] truncated_code = truncated_code.replace("\\n", "\n") code = code.replace("\\n", "\n") s_node = { "id": str(node_key), "func": str(node.function_name), "label": truncated_code, "code": code, "truncated": truncated_code, "states": states, "color": color, "instructions": code.split("\n"), } nodes.append(s_node) for edge in statespace.edges: if edge.condition is None: label = "" else: try: label = str(simplify(edge.condition)).replace("\n", "") except Z3Exception: label = str(edge.condition).replace("\n", "") label = re.sub( "([^_])([\d]{2}\d+)", lambda m: m.group(1) + hex(int(m.group(2))), label ) s_edge = { "from": str(edge.as_dict["from"]), "to": str(edge.as_dict["to"]), "arrows": "to", "label": label, "smooth": {"type": "cubicBezier"}, } edges.append(s_edge) return {"edges": edges, "nodes": nodes} ================================================ FILE: mythril/concolic/__init__.py ================================================ from mythril.concolic.concolic_execution import concolic_execution from mythril.concolic.find_trace import concrete_execution ================================================ FILE: mythril/concolic/concolic_execution.py ================================================ from copy import deepcopy from datetime import datetime from typing import Any, Dict, List from mythril.concolic.concrete_data import ConcreteData from mythril.concolic.find_trace import concrete_execution from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.strategy.concolic import ConcolicStrategy from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.symbolic import execute_transaction from mythril.laser.ethereum.transaction.transaction_models import tx_id_manager from mythril.laser.smt import symbol_factory from mythril.support.support_args import args def flip_branches( init_state: WorldState, concrete_data: ConcreteData, jump_addresses: List[str], trace: List, ) -> List[Dict[str, Dict[str, Any]]]: """ Flips branches and prints the input required for branch flip :param concrete_data: Concrete data :param jump_addresses: Jump addresses to flip :param trace: trace to follow """ tx_id_manager.restart_counter() output_list = [] laser_evm = LaserEVM( execution_timeout=600, use_reachability_check=False, transaction_count=10 ) laser_evm.open_states = [deepcopy(init_state)] laser_evm.strategy = ConcolicStrategy( work_list=laser_evm.work_list, max_depth=100, trace=trace, flip_branch_addresses=jump_addresses, ) time_handler.start_execution(laser_evm.execution_timeout) laser_evm.time = datetime.now() for transaction in concrete_data["steps"]: execute_transaction( laser_evm, callee_address=transaction["address"], caller_address=symbol_factory.BitVecVal( int(transaction["origin"], 16), 256 ), data=transaction["input"][2:], ) if laser_evm.strategy.results: for addr in jump_addresses: output_list.append(laser_evm.strategy.results[addr]) return output_list def concolic_execution( concrete_data: ConcreteData, jump_addresses: List, solver_timeout=100000 ) -> List[Dict[str, Dict[str, Any]]]: """ Executes codes and prints input required to cover the branch flips :param input_file: Input file :param jump_addresses: Jump addresses to flip :param solver_timeout: Solver timeout """ init_state, trace = concrete_execution(concrete_data) args.solver_timeout = solver_timeout output_list = flip_branches( init_state=init_state, concrete_data=concrete_data, jump_addresses=jump_addresses, trace=trace, ) return output_list ================================================ FILE: mythril/concolic/concrete_data.py ================================================ from typing import Dict, List from typing_extensions import TypedDict class AccountData(TypedDict): balance: str code: str nonce: int storage: dict class InitialState(TypedDict): accounts: Dict[str, AccountData] class TransactionData(TypedDict): address: str blockCoinbase: str blockDifficulty: str blockGasLimit: str blockNumber: str blockTime: str calldata: str gasLimit: str gasPrice: str input: str name: str origin: str value: str class ConcreteData(TypedDict): initialState: InitialState steps: List[TransactionData] ================================================ FILE: mythril/concolic/find_trace.py ================================================ import binascii from copy import deepcopy from datetime import datetime from typing import List, Tuple from mythril.concolic.concrete_data import ConcreteData from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.concolic import execute_transaction from mythril.laser.ethereum.transaction.transaction_models import tx_id_manager from mythril.laser.plugin.loader import LaserPluginLoader from mythril.laser.plugin.plugins import TraceFinderBuilder from mythril.laser.smt import symbol_factory from mythril.support.support_args import args def setup_concrete_initial_state(concrete_data: ConcreteData) -> WorldState: """ Sets up concrete initial state :param concrete_data: Concrete data :return: initialised world state """ world_state = WorldState() for address, details in concrete_data["initialState"]["accounts"].items(): account = Account(address, concrete_storage=True) account.code = Disassembly(details["code"][2:]) account.nonce = details["nonce"] if isinstance(details["storage"], str): details["storage"] = eval(details["storage"]) # type: ignore for key, value in details["storage"].items(): key_bitvec = symbol_factory.BitVecVal(int(key, 16), 256) account.storage[key_bitvec] = symbol_factory.BitVecVal(int(value, 16), 256) world_state.put_account(account) account.set_balance(int(details["balance"], 16)) return world_state def concrete_execution(concrete_data: ConcreteData) -> Tuple[WorldState, List]: """ Executes code concretely to find the path to be followed by concolic executor :param concrete_data: Concrete data :return: path trace """ args.pruning_factor = 1 tx_id_manager.restart_counter() init_state = setup_concrete_initial_state(concrete_data) laser_evm = LaserEVM(execution_timeout=1000) laser_evm.open_states = [deepcopy(init_state)] plugin_loader = LaserPluginLoader() plugin_loader.load(TraceFinderBuilder()) time_handler.start_execution(laser_evm.execution_timeout) laser_evm.time = datetime.now() plugin_loader.instrument_virtual_machine(laser_evm, None) for transaction in concrete_data["steps"]: execute_transaction( laser_evm, callee_address=transaction["address"], caller_address=symbol_factory.BitVecVal( int(transaction["origin"], 16), 256 ), origin_address=symbol_factory.BitVecVal( int(transaction["origin"], 16), 256 ), gas_limit=int(transaction.get("gasLimit", "0x9999999999999999999999"), 16), data=binascii.a2b_hex(transaction["input"][2:]), gas_price=int(transaction.get("gasPrice", "0x773594000"), 16), value=int(transaction["value"], 16), track_gas=False, ) tx_id_manager.restart_counter() return init_state, plugin_loader.plugin_list["MythX Trace Finder"].tx_trace # type: ignore ================================================ FILE: mythril/config.ini ================================================ [defaults] dynamic_loading = infura infura_id = ================================================ FILE: mythril/disassembler/__init__.py ================================================ ================================================ FILE: mythril/disassembler/asm.py ================================================ """This module contains various helper classes and functions to deal with EVM code disassembly.""" import re try: from collections.abc import Generator except ImportError: from collections import Generator from functools import lru_cache from mythril.ethereum import util from mythril.support.opcodes import ADDRESS, ADDRESS_OPCODE_MAPPING, OPCODES regex_PUSH = re.compile(r"^PUSH(\d*)$") class EvmInstruction: """Model to hold the information of the disassembly.""" def __init__(self, address, op_code, argument=None): self.address = address self.op_code = op_code self.argument = argument def to_dict(self) -> dict: """ :return: """ result = {"address": self.address, "opcode": self.op_code} if self.argument: result["argument"] = self.argument return result def instruction_list_to_easm(instruction_list: list) -> str: """Convert a list of instructions into an easm op code string. :param instruction_list: :return: """ result = "" for instruction in instruction_list: result += "{} {}".format(instruction["address"], instruction["opcode"]) if "argument" in instruction: result += " " + instruction["argument"] result += "\n" return result def get_opcode_from_name(operation_name: str) -> int: """Get an op code based on its name. :param operation_name: :return: """ if operation_name in OPCODES: return OPCODES[operation_name][ADDRESS] raise RuntimeError("Unknown opcode") def find_op_code_sequence(pattern: list, instruction_list: list) -> Generator: """Returns all indices in instruction_list that point to instruction sequences following a pattern. :param pattern: The pattern to look for, e.g. [["PUSH1", "PUSH2"], ["EQ"]] where ["PUSH1", "EQ"] satisfies pattern :param instruction_list: List of instructions to look in :return: Indices to the instruction sequences """ for i in range(0, len(instruction_list) - len(pattern) + 1): if is_sequence_match(pattern, instruction_list, i): yield i def is_sequence_match(pattern: list, instruction_list: list, index: int) -> bool: """Checks if the instructions starting at index follow a pattern. :param pattern: List of lists describing a pattern, e.g. [["PUSH1", "PUSH2"], ["EQ"]] where ["PUSH1", "EQ"] satisfies pattern :param instruction_list: List of instructions :param index: Index to check for :return: Pattern matched """ for index, pattern_slot in enumerate(pattern, start=index): try: if not instruction_list[index]["opcode"] in pattern_slot: return False except IndexError: return False return True lru_cache(maxsize=2**10) def disassemble(bytecode) -> list: """Disassembles evm bytecode and returns a list of instructions. :param bytecode: :return: """ instruction_list = [] address = 0 length = len(bytecode) if isinstance(bytecode, str): bytecode = util.safe_decode(bytecode) length = len(bytecode) part_code = bytecode[-43:] else: try: part_code = bytes(bytecode[-43:]) except TypeError: part_code = "" try: if "bzzr" in str(part_code): # ignore swarm hash length -= 43 except ValueError: pass while address < length: try: op_code = ADDRESS_OPCODE_MAPPING[bytecode[address]] except KeyError: instruction_list.append(EvmInstruction(address, "INVALID")) address += 1 continue current_instruction = EvmInstruction(address, op_code) match = re.search(regex_PUSH, op_code) if match: argument_bytes = bytecode[address + 1 : address + 1 + int(match.group(1))] if isinstance(argument_bytes, bytes): current_instruction.argument = "0x" + argument_bytes.hex() else: current_instruction.argument = argument_bytes address += int(match.group(1)) instruction_list.append(current_instruction) address += 1 # We use a to_dict() here for compatibility reasons return [element.to_dict() for element in instruction_list] ================================================ FILE: mythril/disassembler/disassembly.py ================================================ """This module contains the class used to represent disassembly code.""" from typing import Dict, List, Tuple from mythril.disassembler import asm from mythril.ethereum import util from mythril.support.signatures import SignatureDB class Disassembly(object): """Disassembly class. Stores bytecode, and its disassembly. Additionally it will gather the following information on the existing functions in the disassembled code: - function hashes - function name to entry point mapping - function entry point to function name mapping """ def __init__(self, code: str) -> None: """ :param code: """ self.bytecode = code if isinstance(code, str): self.instruction_list = asm.disassemble(util.safe_decode(code)) else: self.instruction_list = asm.disassemble(code) self.func_hashes: List[str] = [] self.function_name_to_address: Dict[str, int] = {} self.address_to_function_name: Dict[int, str] = {} self.assign_bytecode(bytecode=code) def assign_bytecode(self, bytecode): self.bytecode = bytecode # open from default locations # control if you want to have online signature hash lookups signatures = SignatureDB() self.instruction_list = asm.disassemble(bytecode) # Need to take from PUSH1 to PUSH4 because solc seems to remove excess 0s at the beginning for optimizing jump_table_indices = asm.find_op_code_sequence( [("PUSH1", "PUSH2", "PUSH3", "PUSH4"), ("EQ",)], self.instruction_list ) for index in jump_table_indices: function_hash, jump_target, function_name = get_function_info( index, self.instruction_list, signatures ) self.func_hashes.append(function_hash) if jump_target is not None and function_name is not None: self.function_name_to_address[function_name] = jump_target self.address_to_function_name[jump_target] = function_name def get_easm(self): """ :return: """ return asm.instruction_list_to_easm(self.instruction_list) def get_function_info( index: int, instruction_list: list, signature_database: SignatureDB ) -> Tuple[str, int, str]: """Finds the function information for a call table entry Solidity uses the first 4 bytes of the calldata to indicate which function the message call should execute The generated code that directs execution to the correct function looks like this: - PUSH function_hash - EQ - PUSH entry_point - JUMPI This function takes an index that points to the first instruction, and from that finds out the function hash, function entry and the function name. :param index: Start of the entry pattern :param instruction_list: Instruction list for the contract that is being analyzed :param signature_database: Database used to map function hashes to their respective function names :return: function hash, function entry point, function name """ # Append with missing 0s at the beginning if isinstance(instruction_list[index]["argument"], tuple): try: function_hash = "0x" + bytes( instruction_list[index]["argument"] ).hex().rjust(8, "0") except AttributeError: raise ValueError( "Mythril currently does not support symbolic function signatures" ) else: function_hash = "0x" + instruction_list[index]["argument"][2:].rjust(8, "0") function_names = signature_database.get(function_hash) if len(function_names) > 0: function_name = " or ".join(set(function_names)) else: function_name = "_function_" + function_hash try: offset = instruction_list[index + 2]["argument"] if isinstance(offset, tuple): offset = bytes(offset).hex() entry_point = int(offset, 16) except (KeyError, IndexError): return function_hash, None, None return function_hash, entry_point, function_name ================================================ FILE: mythril/ethereum/__init__.py ================================================ ================================================ FILE: mythril/ethereum/evmcontract.py ================================================ """This module contains the class representing EVM contracts, aka Smart Contracts.""" import logging import re import persistent from mythril.disassembler.disassembly import Disassembly from mythril.support.support_utils import get_code_hash, sha3 log = logging.getLogger(__name__) class EVMContract(persistent.Persistent): """This class represents an address with associated code (Smart Contract).""" def __init__(self, code="", creation_code="", name="Unknown"): """Create a new contract. Workaround: We currently do not support compile-time linking. Dynamic contract addresses of the format __[contract-name]_____________ are replaced with a generic address Apply this for creation_code & code :param code: :param creation_code: :param name: """ creation_code = re.sub(r"(_{2}.{38})", "aa" * 20, creation_code) code = re.sub(r"(_{2}.{38})", "aa" * 20, code) self.creation_code = creation_code self.name = name self.code = code self.disassembly = Disassembly(code) self.creation_disassembly = Disassembly(creation_code) @property def bytecode_hash(self): """ :return: runtime bytecode hash """ return get_code_hash(self.code) @property def creation_bytecode_hash(self): """ :return: Creation bytecode hash """ return get_code_hash(self.creation_code) def as_dict(self): """ :return: """ return { "name": self.name, "code": self.code, "creation_code": self.creation_code, "disassembly": self.disassembly, } def get_easm(self): """ :return: """ return self.disassembly.get_easm() def get_creation_easm(self): """ :return: """ return self.creation_disassembly.get_easm() def matches_expression(self, expression): """ :param expression: :return: """ str_eval = "" easm_code = None tokens = re.split(r"\s+(and|or|not)\s+", expression, re.IGNORECASE) for token in tokens: if token in ("and", "or", "not"): str_eval += " " + token + " " continue m = re.match(r"^code#([a-zA-Z0-9\s,\[\]]+)#", token) if m: if easm_code is None: easm_code = self.get_easm() code = m.group(1).replace(",", "\\n") str_eval += '"' + code + '" in easm_code' continue m = re.match(r"^func#([a-zA-Z0-9\s_,(\\)\[\]]+)#$", token) if m: sign_hash = "0x" + sha3(m.group(1))[:4].hex() str_eval += '"' + sign_hash + '" in self.disassembly.func_hashes' return eval(str_eval.strip()) ================================================ FILE: mythril/ethereum/interface/__init__.py ================================================ ================================================ FILE: mythril/ethereum/interface/rpc/__init__.py ================================================ ================================================ FILE: mythril/ethereum/interface/rpc/base_client.py ================================================ """This module provides a basic RPC interface client. This code is adapted from: https://github.com/ConsenSys/ethjsonrpc """ from abc import abstractmethod from .constants import BLOCK_TAG_LATEST, BLOCK_TAGS from .utils import hex_to_dec, validate_block GETH_DEFAULT_RPC_PORT = 8545 ETH_DEFAULT_RPC_PORT = 8545 PARITY_DEFAULT_RPC_PORT = 8545 PYETHAPP_DEFAULT_RPC_PORT = 4000 MAX_RETRIES = 3 JSON_MEDIA_TYPE = "application/json" class BaseClient(object): """The base RPC client class.""" @abstractmethod def _call(self, method, params=None, _id=1): """TODO: documentation :param method: :param params: :param _id: :return: """ pass def eth_coinbase(self): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_coinbase TESTED """ return self._call("eth_coinbase") def eth_blockNumber(self): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_blocknumber TESTED """ return hex_to_dec(self._call("eth_blockNumber")) def eth_getBalance(self, address=None, block=BLOCK_TAG_LATEST): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getbalance TESTED """ address = address or self.eth_coinbase() block = validate_block(block) return hex_to_dec(self._call("eth_getBalance", [address, block])) def eth_getStorageAt(self, address=None, position=0, block=BLOCK_TAG_LATEST): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getstorageat TESTED """ block = validate_block(block) return self._call("eth_getStorageAt", [address, hex(position), block]) def eth_getCode(self, address, default_block=BLOCK_TAG_LATEST): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getcode NEEDS TESTING """ if isinstance(default_block, str): if default_block not in BLOCK_TAGS: raise ValueError return self._call("eth_getCode", [address, default_block]) def eth_getBlockByNumber(self, block=BLOCK_TAG_LATEST, tx_objects=True): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getblockbynumber TESTED """ block = validate_block(block) return self._call("eth_getBlockByNumber", [block, tx_objects]) def eth_getTransactionReceipt(self, tx_hash): """TODO: documentation https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gettransactionreceipt TESTED """ return self._call("eth_getTransactionReceipt", [tx_hash]) ================================================ FILE: mythril/ethereum/interface/rpc/client.py ================================================ """This module contains a basic Ethereum RPC client. This code is adapted from: https://github.com/ConsenSys/ethjsonrpc """ import json import logging import requests from requests.adapters import HTTPAdapter from requests.exceptions import ConnectionError as RequestsConnectionError from .base_client import BaseClient from .exceptions import ( BadJsonError, BadResponseError, BadStatusCodeError, ConnectionError, ) log = logging.getLogger(__name__) GETH_DEFAULT_RPC_PORT = 8545 ETH_DEFAULT_RPC_PORT = 8545 PARITY_DEFAULT_RPC_PORT = 8545 PYETHAPP_DEFAULT_RPC_PORT = 4000 MAX_RETRIES = 3 JSON_MEDIA_TYPE = "application/json" class EthJsonRpc(BaseClient): """Ethereum JSON-RPC client class.""" def __init__(self, host="localhost", port=GETH_DEFAULT_RPC_PORT, tls=False): """ :param host: :param port: :param tls: """ self.host = host self.port = port self.tls = tls self.session = requests.Session() self.session.mount(self.host, HTTPAdapter(max_retries=MAX_RETRIES)) def _call(self, method, params=None, _id=1): """ :param method: :param params: :param _id: :return: """ params = params or [] data = {"jsonrpc": "2.0", "method": method, "params": params, "id": _id} scheme = "http" if self.tls: scheme += "s" if self.host: if self.port: url = "{}://{}:{}".format(scheme, self.host, self.port) else: url = "{}://{}".format(scheme, self.host) else: url = "{}".format(scheme) headers = {"Content-Type": JSON_MEDIA_TYPE} log.debug("rpc send: %s" % json.dumps(data)) try: r = self.session.post(url, headers=headers, data=json.dumps(data)) except RequestsConnectionError: raise ConnectionError if r.status_code / 100 != 2: raise BadStatusCodeError(r.status_code) try: response = r.json() log.debug("rpc response: %s" % response) except ValueError: raise BadJsonError(r.text) try: return response["result"] except KeyError: raise BadResponseError(response) def close(self): """Close the RPC client's session.""" self.session.close() ================================================ FILE: mythril/ethereum/interface/rpc/constants.py ================================================ """This file contains constants used used by the Ethereum JSON RPC interface.""" BLOCK_TAG_EARLIEST = "earliest" BLOCK_TAG_LATEST = "latest" BLOCK_TAG_PENDING = "pending" BLOCK_TAGS = (BLOCK_TAG_EARLIEST, BLOCK_TAG_LATEST, BLOCK_TAG_PENDING) ================================================ FILE: mythril/ethereum/interface/rpc/exceptions.py ================================================ """This module contains exceptions regarding JSON-RPC communication.""" class EthJsonRpcError(Exception): """The JSON-RPC base exception type.""" pass class ConnectionError(EthJsonRpcError): """An RPC exception denoting there was an error in connecting to the RPC instance.""" pass class BadStatusCodeError(EthJsonRpcError): """An RPC exception denoting a bad status code returned by the RPC instance.""" pass class BadJsonError(EthJsonRpcError): """An RPC exception denoting that the RPC instance returned a bad JSON object.""" pass class BadResponseError(EthJsonRpcError): """An RPC exception denoting that the RPC instance returned a bad response.""" pass ================================================ FILE: mythril/ethereum/interface/rpc/utils.py ================================================ """This module contains various utility functions regarding the RPC data format and validation.""" from .constants import BLOCK_TAGS def hex_to_dec(x): """Convert hex to decimal. :param x: :return: """ return int(x, 16) def clean_hex(d): """Convert decimal to hex and remove the "L" suffix that is appended to large numbers. :param d: :return: """ return hex(d).rstrip("L") def validate_block(block): """ :param block: :return: """ if isinstance(block, str): if block not in BLOCK_TAGS: raise ValueError("invalid block tag") if isinstance(block, int): block = hex(block) return block def wei_to_ether(wei): """Convert wei to ether. :param wei: :return: """ return 1.0 * wei / 10**18 def ether_to_wei(ether): """Convert ether to wei. :param ether: :return: """ return ether * 10**18 ================================================ FILE: mythril/ethereum/util.py ================================================ """This module contains various utility functions regarding unit conversion and solc integration.""" import binascii import json import logging import os import platform import re import typing from json.decoder import JSONDecodeError from subprocess import PIPE, Popen from typing import Tuple import semantic_version as semver import solcx from pyparsing import Combine, Optional, Regex, Word from requests.exceptions import ConnectionError from mythril.exceptions import CompilerError from mythril.support.support_args import args log = logging.getLogger(__name__) def safe_decode(hex_encoded_string): """ :param hex_encoded_string: :return: """ if hex_encoded_string.startswith("0x"): return bytes.fromhex(hex_encoded_string[2:]) else: return bytes.fromhex(hex_encoded_string) def get_solc_json(file, solc_binary="solc", solc_settings_json=None): """ :param file: :param solc_binary: :param solc_settings_json: :return: """ if args.solc_args is None: cmd = [solc_binary, "--standard-json", "--allow-paths", ".,/"] else: cmd = [solc_binary, "--standard-json"] + args.solc_args.split() settings = {} if solc_settings_json: with open(solc_settings_json) as f: settings = json.load(f) if "optimizer" not in settings: settings.update({"optimizer": {"enabled": False}}) settings.update( { "outputSelection": { "*": { "": ["ast"], "*": [ "metadata", "evm.bytecode", "evm.deployedBytecode", "evm.methodIdentifiers", ], } }, } ) input_json = json.dumps( { "language": "Solidity", "sources": {file: {"urls": [file]}}, "settings": settings, } ) try: p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate(bytes(input_json, "utf8")) except FileNotFoundError: raise CompilerError( "Compiler not found. Make sure that solc is installed and in PATH, or set the SOLC environment variable." ) out = stdout.decode("UTF-8") try: result = json.loads(out) except JSONDecodeError as e: log.error(f"Encountered a decode error.\n stdout:{out}\n stderr: {stderr}") raise e for error in result.get("errors", []): if error["severity"] == "error": raise CompilerError( "Solc experienced a fatal error.\n\n%s" % error["formattedMessage"] ) return result def get_random_address(): """ :return: """ return binascii.b2a_hex(os.urandom(20)).decode("UTF-8") def get_indexed_address(index): """ :param index: :return: """ return "0x" + (hex(index)[2:] * 40) def solc_exists(version): """ :param version: :return: """ if platform.system() == "Darwin": solcx.import_installed_solc() solcx.install_solc("v" + version) solcx.set_solc_version("v" + version) solc_binary = solcx.install.get_executable() return solc_binary def parse_pragma(solidity_code): lt = Word("<") gtr = Word(">") eq = Word("=") carrot = Word("^") version = Regex(r"\s*[0-9]+\s*\.\s*[0-9]+\s*(\.\s*[0-9]+)?") inequality = Optional( eq | (Combine(gtr + Optional(eq)) | Combine(lt + Optional(eq))) ) min_version = Optional(carrot | inequality) + version max_version = Optional(inequality + version) pragma = Word("pragma") + Word("solidity") + min_version + Optional(max_version) result = pragma.parseString(solidity_code) min_inequality = result[2] if result[2] in [">", "<", ">=", "<=", "="] else "" min_carrot = result[2] if result[2] == "^" else "" min_version = result[3] if min_carrot != "" or min_inequality != "" else result[2] return { "min_carrot": min_carrot, "min_inequality": min_inequality, "min_version": min_version, "max_inequality": result[4] if len(result) > 4 else None, "max_version": result[5] if len(result) > 5 else None, } try: all_versions = solcx.get_installable_solc_versions() except ConnectionError: # No internet, trying to proceed with installed compilers all_versions = solcx.get_installed_solc_versions() VOID_START = re.compile("//|/\\*|\"|'") QUOTE_END = re.compile("(? str: """Return program without Solidity comments and strings :param str program: Solidity program with lines separated by \\n :return: program with strings emptied and comments removed :rtype: str """ result = "" while True: match_start_of_void = VOID_START.search(program) if not match_start_of_void: result += program break else: result += program[: match_start_of_void.start()] if match_start_of_void[0] == "//": end = program.find("\n", match_start_of_void.end()) program = "" if end == -1 else program[end:] elif match_start_of_void[0] == "/*": end = program.find("*/", match_start_of_void.end()) result += " " program = "" if end == -1 else program[end + 2 :] else: if match_start_of_void[0] == "'": match_end_of_string = QUOTE_END.search( program[match_start_of_void.end() :] ) else: match_end_of_string = DQUOTE_END.search( program[match_start_of_void.end() :] ) if not match_end_of_string: # unclosed string break program = program[ match_start_of_void.end() + match_end_of_string.end() : ] return result def extract_version_line(program: typing.Optional[str]) -> typing.Optional[str]: if not program: return None # normalize line endings if "\n" in program: program = program.replace("\r", "") else: program = program.replace("\r", "\n") # extract regular pragma program_wo_comments_strings = remove_comments_strings(program) for line in program_wo_comments_strings.split("\n"): if "pragma solidity" in line: return line.rstrip() # extract pragma from comments for line in program.split("\n"): if "pragma solidity" in line: return line.rstrip() return None def extract_version(program: typing.Optional[str]) -> typing.Optional[str]: version_line = extract_version_line(program) if not version_line: return None assert "pragma solidity" in version_line if version_line[-1] == ";": version_line = version_line[:-1] version_line = version_line[version_line.find("pragma") :] pragma_dict = parse_pragma(version_line) min_inequality = pragma_dict.get("min_inequality", None) max_inequality = pragma_dict.get("max_inequality", None) min_version = pragma_dict.get("min_version", None) if min_version is not None: min_version = min_version.replace(" ", "").replace("\t", "") max_version = pragma_dict.get("max_version", None) if max_version is not None: max_version = max_version.replace(" ", "").replace("\t", "") version_spec = ( f"{min_inequality}{min_version},{max_inequality}{max_version}" if max_version else min_version ) version_constraint = semver.SimpleSpec(version_spec) for version in all_versions: semver_version = semver.Version(str(version)) if semver_version in version_constraint: if "0.5.17" in str(semver_version): # Solidity 0.5.17 Does not compile in a lot of cases. continue return str(semver_version) def extract_binary(file: str) -> Tuple[str, str]: program = None with open(file) as f: program = f.read() version = extract_version(program) if version is None: return os.environ.get("SOLC") or "solc", version return solc_exists(version), version ================================================ FILE: mythril/exceptions.py ================================================ """This module contains general exceptions used by Mythril.""" class MythrilBaseException(Exception): """The Mythril exception base type.""" pass class CompilerError(MythrilBaseException): """A Mythril exception denoting an error during code compilation.""" pass class UnsatError(MythrilBaseException): """A Mythril exception denoting the unsatisfiability of a series of constraints.""" pass class SolverTimeOutException(UnsatError): """A Mythril exception denoting the unsatisfiability of a series of constraints.""" pass class NoContractFoundError(MythrilBaseException): """A Mythril exception denoting that a given contract file was not found.""" pass class CriticalError(MythrilBaseException): """A Mythril exception denoting an unknown critical error has been encountered.""" pass class DetectorNotFoundError(MythrilBaseException): """A Mythril exception denoting attempted usage of a non-existant detection module.""" pass class IllegalArgumentError(ValueError): """The argument used does not exist""" pass ================================================ FILE: mythril/interfaces/__init__.py ================================================ ================================================ FILE: mythril/interfaces/cli.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """mythril.py: Bug hunting on the Ethereum blockchain http://www.github.com/ConsenSys/mythril """ import argparse import json import logging import os import sys import traceback from argparse import ArgumentParser, Namespace, RawTextHelpFormatter from ast import literal_eval import coloredlogs from mythril.__version__ import __version__ as VERSION from mythril.analysis.module import ModuleLoader from mythril.analysis.report import Report from mythril.concolic import concolic_execution from mythril.exceptions import ( CriticalError, DetectorNotFoundError, ) from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.mythril import MythrilAnalyzer, MythrilConfig, MythrilDisassembler from mythril.plugin.loader import MythrilPluginLoader # Initialise core Mythril Component _ = MythrilPluginLoader() ANALYZE_LIST = ("analyze", "a") DISASSEMBLE_LIST = ("disassemble", "d") FOUNDRY_LIST = ("foundry", "f") CONCOLIC_LIST = ("concolic", "c") SAFE_FUNCTIONS_COMMAND = "safe-functions" READ_STORAGE_COMNAND = "read-storage" FUNCTION_TO_HASH_COMMAND = "function-to-hash" HASH_TO_ADDRESS_COMMAND = "hash-to-address" LIST_DETECTORS_COMMAND = "list-detectors" VERSION_COMMAND = "version" HELP_COMMAND = "help" log = logging.getLogger(__name__) COMMAND_LIST = ( ANALYZE_LIST + DISASSEMBLE_LIST + FOUNDRY_LIST + CONCOLIC_LIST + ( READ_STORAGE_COMNAND, SAFE_FUNCTIONS_COMMAND, FUNCTION_TO_HASH_COMMAND, HASH_TO_ADDRESS_COMMAND, LIST_DETECTORS_COMMAND, VERSION_COMMAND, HELP_COMMAND, ) ) def exit_with_error(format_, message): """ Exits with error :param format_: The format of the message :param message: message """ if format_ == "text" or format_ == "markdown": log.error(message) elif format_ == "json": result = {"success": False, "error": str(message), "issues": []} print(json.dumps(result)) else: result = [ { "issues": [], "sourceType": "", "sourceFormat": "", "sourceList": [], "meta": {"logs": [{"level": "error", "hidden": True, "msg": message}]}, } ] print(json.dumps(result)) sys.exit() def get_runtime_input_parser() -> ArgumentParser: """ Returns Parser which handles input :return: Parser which handles input """ parser = ArgumentParser(add_help=False) parser.add_argument( "-a", "--address", help="pull contract from the blockchain", metavar="CONTRACT_ADDRESS", ) parser.add_argument( "--bin-runtime", action="store_true", help="Only when -c or -f is used. Consider the input bytecode as binary runtime code, default being the contract creation bytecode.", ) return parser def get_creation_input_parser() -> ArgumentParser: """ Returns Parser which handles input :return: Parser which handles input """ parser = ArgumentParser(add_help=False) parser.add_argument( "-c", "--code", help='hex-encoded bytecode string ("6060604052...")', metavar="BYTECODE", ) parser.add_argument( "-f", "--codefile", help="file containing hex-encoded bytecode string", metavar="BYTECODEFILE", type=argparse.FileType("r"), ) return parser def get_safe_functions_parser() -> ArgumentParser: """ Returns Parser which handles checking for safe functions :return: Parser which handles checking for safe functions """ parser = ArgumentParser(add_help=False) parser.add_argument( "-c", "--code", help='hex-encoded bytecode string ("6060604052...")', metavar="BYTECODE", ) parser.add_argument( "-f", "--codefile", help="file containing hex-encoded bytecode string", metavar="BYTECODEFILE", type=argparse.FileType("r"), ) return parser def get_output_parser() -> ArgumentParser: """ Get parser which handles output :return: Parser which handles output """ parser = argparse.ArgumentParser(add_help=False) parser.add_argument( "-o", "--outform", choices=["text", "markdown", "json", "jsonv2"], default="text", help="report output format", metavar="", ) return parser def get_rpc_parser() -> ArgumentParser: """ Get parser which handles RPC flags :return: Parser which handles rpc inputs """ parser = argparse.ArgumentParser(add_help=False) parser.add_argument( "--rpc", help="custom RPC settings", metavar="HOST:PORT / ganache / infura-[network_name]", default="infura-mainnet", ) parser.add_argument( "--rpctls", type=bool, default=False, help="RPC connection over TLS" ) parser.add_argument("--infura-id", help="set infura id for onchain analysis") return parser def get_utilities_parser() -> ArgumentParser: """ Get parser which handles utilities flags :return: Parser which handles utility flags """ parser = argparse.ArgumentParser(add_help=False) parser.add_argument( "--solc-json", help="Json for the optional 'settings' parameter of solc's standard-json input", ) parser.add_argument( "--solc-args", help="""Provide solc args, example: --solc-args "--allow-paths --include-path /root_folder/node_modules --base-path /home/contracts" """, type=str, ) parser.add_argument( "--solv", help="specify solidity compiler version. If not present, will try to install it (Experimental)", metavar="SOLV", ) return parser def create_concolic_parser(parser: ArgumentParser) -> ArgumentParser: """ Get parser which handles arguments for concolic branch flipping """ parser.add_argument( "input", help="The input jsonv2 file with concrete data", ) parser.add_argument( "--branches", help="branch addresses to be flipped. usage: --branches 34,6f8,16a", required=True, metavar="BRANCH", ) parser.add_argument( "--solver-timeout", type=int, default=100000, help="The maximum amount of time(in milli seconds) the solver spends for queries from analysis modules", ) return parser def main() -> None: """The main CLI interface entry point.""" rpc_parser = get_rpc_parser() utilities_parser = get_utilities_parser() runtime_input_parser = get_runtime_input_parser() creation_input_parser = get_creation_input_parser() output_parser = get_output_parser() parser = argparse.ArgumentParser( description="Security analysis of Ethereum smart contracts" ) parser.add_argument("--epic", action="store_true", help=argparse.SUPPRESS) parser.add_argument( "-v", type=int, help="log level (0-5)", metavar="LOG_LEVEL", default=2 ) subparsers = parser.add_subparsers(dest="command", help="Commands") safe_function_parser = subparsers.add_parser( SAFE_FUNCTIONS_COMMAND, help="Check functions which are completely safe using symbolic execution", parents=[ rpc_parser, utilities_parser, creation_input_parser, runtime_input_parser, output_parser, ], formatter_class=RawTextHelpFormatter, ) analyzer_parser = subparsers.add_parser( ANALYZE_LIST[0], help="Triggers the analysis of the smart contract", parents=[ rpc_parser, utilities_parser, creation_input_parser, runtime_input_parser, output_parser, ], aliases=ANALYZE_LIST[1:], formatter_class=RawTextHelpFormatter, ) create_safe_functions_parser(safe_function_parser) create_analyzer_parser(analyzer_parser) disassemble_parser = subparsers.add_parser( DISASSEMBLE_LIST[0], help="Disassembles the smart contract", aliases=DISASSEMBLE_LIST[1:], parents=[ rpc_parser, utilities_parser, creation_input_parser, runtime_input_parser, ], formatter_class=RawTextHelpFormatter, ) create_disassemble_parser(disassemble_parser) concolic_parser = subparsers.add_parser( CONCOLIC_LIST[0], help="Runs concolic execution to flip the desired branches", aliases=CONCOLIC_LIST[1:], parents=[], formatter_class=RawTextHelpFormatter, ) create_concolic_parser(concolic_parser) foundry_parser = subparsers.add_parser( FOUNDRY_LIST[0], help="Triggers the analysis of the smart contract", parents=[ rpc_parser, utilities_parser, output_parser, ], aliases=FOUNDRY_LIST[1:], formatter_class=RawTextHelpFormatter, ) _ = subparsers.add_parser( LIST_DETECTORS_COMMAND, parents=[output_parser], help="Lists available detection modules", ) read_storage_parser = subparsers.add_parser( READ_STORAGE_COMNAND, help="Retrieves storage slots from a given address through rpc", parents=[rpc_parser], ) contract_func_to_hash = subparsers.add_parser( FUNCTION_TO_HASH_COMMAND, help="Returns the hash signature of the function" ) contract_hash_to_addr = subparsers.add_parser( HASH_TO_ADDRESS_COMMAND, help="converts the hashes in the blockchain to ethereum address", ) subparsers.add_parser( VERSION_COMMAND, parents=[output_parser], help="Outputs the version" ) create_read_storage_parser(read_storage_parser) create_hash_to_addr_parser(contract_hash_to_addr) create_func_to_hash_parser(contract_func_to_hash) create_foundry_parser(foundry_parser) subparsers.add_parser(HELP_COMMAND, add_help=False) # Get config values args = parser.parse_args() parse_args_and_execute(parser=parser, args=args) def create_disassemble_parser(parser: ArgumentParser): """ Modify parser to handle disassembly :param parser: :return: """ # Using nargs=* would the implementation below for getting code for both disassemble and analyze parser.add_argument( "solidity_files", nargs="*", help="Inputs file name and contract name. Currently supports a single contract\n" "usage: file1.sol:OptionalContractName", ) def create_read_storage_parser(read_storage_parser: ArgumentParser): """ Modify parser to handle storage slots :param read_storage_parser: :return: """ read_storage_parser.add_argument( "storage_slots", help="read state variables from storage index", metavar="INDEX,NUM_SLOTS,[array] / mapping,INDEX,[KEY1, KEY2...]", ) read_storage_parser.add_argument( "address", help="contract address", metavar="ADDRESS" ) def create_func_to_hash_parser(parser: ArgumentParser): """ Modify parser to handle func_to_hash command :param parser: :return: """ parser.add_argument( "func_name", help="calculate function signature hash", metavar="SIGNATURE" ) def create_hash_to_addr_parser(hash_parser: ArgumentParser): """ Modify parser to handle hash_to_addr command :param hash_parser: :return: """ hash_parser.add_argument( "hash", help="Find the address from hash", metavar="FUNCTION_NAME" ) def add_graph_commands(parser: ArgumentParser): commands = parser.add_argument_group("commands") commands.add_argument("-g", "--graph", help="generate a control flow graph") commands.add_argument( "-j", "--statespace-json", help="dumps the statespace json", metavar="OUTPUT_FILE", ) def create_safe_functions_parser(parser: ArgumentParser): """ The duplication exists between safe-functions and analyze as some of them have different default values. :param parser: Parser """ parser.add_argument( "solidity_files", nargs="*", help="Inputs file name and contract name. \n" "usage: file1.sol:OptionalContractName file2.sol file3.sol:OptionalContractName", ) options = parser.add_argument_group("options") add_analysis_args(options) def add_analysis_args(options): """ Adds arguments for analysis :param options: Analysis Options """ options.add_argument( "-m", "--modules", help="Comma-separated list of security analysis modules", metavar="MODULES", ) options.add_argument( "--max-depth", type=int, default=128, help="Maximum recursion depth for symbolic execution", ) options.add_argument( "--call-depth-limit", type=int, default=3, help="Maximum call depth limit for symbolic execution", ) options.add_argument( "--strategy", choices=["dfs", "bfs", "naive-random", "weighted-random", "pending"], default="bfs", help="Symbolic execution strategy", ) options.add_argument( "--transaction-sequences", type=str, default=None, help="The possible transaction sequences to be executed. " "Like [[func_hash1, func_hash2], [func_hash2, func_hash3]] where the first transaction is constrained " "with func_hash1 and func_hash2, and the second tx is constrained with func_hash2 and func_hash3. Use -1 as a proxy for fallback() function and -2 for receive() function.", ) options.add_argument( "--beam-search", type=int, default=None, help="Beam search with with", ) options.add_argument( "-b", "--loop-bound", type=int, default=3, help="Bound loops at n iterations", metavar="N", ) options.add_argument( "-t", "--transaction-count", type=int, default=2, help="Maximum number of transactions issued by laser", ) options.add_argument( "--execution-timeout", type=int, default=3600, help="The amount of seconds to spend on symbolic execution", ) options.add_argument( "--solver-timeout", type=int, default=25000, help="The maximum amount of time(in milli seconds) the solver spends for queries from analysis modules", ) options.add_argument( "--create-timeout", type=int, default=30, help="The amount of seconds to spend on the initial contract creation", ) options.add_argument( "--parallel-solving", action="store_true", help="Enable solving z3 queries in parallel", ) options.add_argument( "--solver-log", help="Path to the directory for solver log", metavar="SOLVER_LOG", ) options.add_argument( "--no-onchain-data", action="store_true", help="Don't attempt to retrieve contract code, variables and balances from the blockchain", ) options.add_argument( "--pruning-factor", type=float, default=None, help="Checks for reachability at the rate of (range 0-1.0). Where 1.0 would mean checking for every execution", ) options.add_argument( "--unconstrained-storage", action="store_true", help="Default storage value is symbolic, turns off the on-chain storage loading", ) options.add_argument( "--phrack", action="store_true", help="Phrack-style call graph" ) options.add_argument( "--enable-physics", action="store_true", help="Enable graph physics simulation" ) options.add_argument( "-q", "--query-signature", action="store_true", help="Lookup function signatures through www.4byte.directory", ) options.add_argument( "--disable-iprof", action="store_true", help="Disable the instruction profiler" ) options.add_argument( "--disable-dependency-pruning", action="store_true", help="Deactivate dependency-based pruning", ) options.add_argument( "--disable-coverage-strategy", action="store_true", help="Disable coverage based search strategy", ) options.add_argument( "--disable-mutation-pruner", action="store_true", help="Disable mutation pruner", ) options.add_argument( "--enable-state-merging", action="store_true", help="Enable State Merging", ) options.add_argument( "--enable-summaries", action="store_true", help="Enable using symbolic summaries", ) options.add_argument( "--custom-modules-directory", help="Designates a separate directory to search for custom analysis modules", metavar="CUSTOM_MODULES_DIRECTORY", ) options.add_argument( "--attacker-address", help="Designates a specific attacker address to use during analysis", metavar="ATTACKER_ADDRESS", ) options.add_argument( "--creator-address", help="Designates a specific creator address to use during analysis", metavar="CREATOR_ADDRESS", ) def create_analyzer_parser(analyzer_parser: ArgumentParser): """ Modify parser to handle analyze command :param analyzer_parser: :return: """ analyzer_parser.add_argument( "solidity_files", nargs="*", help="Inputs file name and contract name. \n" "usage: file1.sol:OptionalContractName file2.sol file3.sol:OptionalContractName", ) add_graph_commands(analyzer_parser) options = analyzer_parser.add_argument_group("options") add_analysis_args(options) def create_foundry_parser(foundry_parser: ArgumentParser): add_graph_commands(foundry_parser) options = foundry_parser.add_argument_group("options") add_analysis_args(options) def validate_args(args: Namespace): """ Validate cli args :param args: :return: """ if hasattr(args, "v"): if 0 <= args.v < 6: log_levels = [ logging.NOTSET, logging.CRITICAL, logging.ERROR, logging.WARNING, logging.INFO, logging.DEBUG, ] coloredlogs.install( fmt="%(name)s [%(levelname)s]: %(message)s", level=log_levels[args.v] ) else: exit_with_error( args.outform, "Invalid -v value, you can find valid values in usage" ) if args.command in DISASSEMBLE_LIST and len(args.solidity_files) > 1: exit_with_error("text", "Only a single arg is supported for using disassemble") if getattr(args, "transaction_sequences", None): if getattr(args, "disable_dependency_pruning", False) is False: log.warning( "It is advised to disable dependency pruning (use the flag --disable-dependency-pruning) when specifying transaction sequences." ) try: args.transaction_sequences = literal_eval(str(args.transaction_sequences)) except ValueError: exit_with_error( args.outform, "The transaction sequence is in incorrect format, It should be " "[list of possible function hashes in 1st transaction, " "list of possible func hashes in 2nd tx, ...] " "If any list is empty then all possible functions are considered for that transaction." "Use -1 as a proxy for fallback() and -2 for receive() function.", ) if len(args.transaction_sequences) != args.transaction_count: args.transaction_count = len(args.transaction_sequences) def set_config(args: Namespace): """ Set config based on args :param args: :return: modified config """ config = MythrilConfig() if getattr(args, "infura_id", None): config.set_api_infura_id(args.infura_id) if (args.command in ANALYZE_LIST and not args.no_onchain_data) and not ( args.rpc or args.i ): config.set_api_from_config_path() if getattr(args, "rpc", None): # Establish RPC connection if necessary config.set_api_rpc(rpc=args.rpc, rpctls=args.rpctls) return config def load_code(disassembler: MythrilDisassembler, args: Namespace): """ Loads code into disassembly and returns address :param disassembler: :param args: :return: Address """ address = None if getattr(args, "code", None): # Load from bytecode code = args.code[2:] if args.code.startswith("0x") else args.code address, _ = disassembler.load_from_bytecode(code, args.bin_runtime) elif getattr(args, "codefile", None): bytecode = "".join([l.strip() for l in args.codefile if len(l.strip()) > 0]) bytecode = bytecode[2:] if bytecode.startswith("0x") else bytecode address, _ = disassembler.load_from_bytecode(bytecode, args.bin_runtime) elif getattr(args, "address", None): # Get bytecode from a contract address address, _ = disassembler.load_from_address(args.address) elif getattr(args, "solidity_files", None): # Compile Solidity source file(s) if args.command in ANALYZE_LIST and args.graph and len(args.solidity_files) > 1: exit_with_error( args.outform, "Cannot generate call graphs from multiple input files. Please do it one at a time.", ) address, _ = disassembler.load_from_solidity( args.solidity_files ) # list of files elif args.command in FOUNDRY_LIST: address, _ = disassembler.load_from_foundry() else: exit_with_error( getattr(args, "outform", "text"), "No input bytecode. Please provide EVM code via -c BYTECODE, -a ADDRESS, -f BYTECODE_FILE or ", ) return address def print_function_report(myth_disassembler: MythrilDisassembler, report: Report): """ Prints the function report :param report: Mythril's report :return: """ contract_data = {} for contract in myth_disassembler.contracts: contract_data[contract.name] = list( set(contract.disassembly.address_to_function_name.values()) ) for issue in report.issues.values(): if issue.function in contract_data[issue.contract]: contract_data[issue.contract].remove(issue.function) for contract, function_list in contract_data.items(): print(f"Contract {contract}: \n") print( f"""{len(function_list)} functions are deemed safe in this contract: {", ".join(function_list)}\n\n""" ) def execute_command( disassembler: MythrilDisassembler, address: str, parser: ArgumentParser, args: Namespace, ): """ Execute command :param disassembler: :param address: :param parser: :param args: :return: """ if getattr(args, "beam_search", None): strategy = f"beam-search: {args.beam_search}" else: strategy = getattr(args, "strategy", "dfs") if args.command == READ_STORAGE_COMNAND: storage = disassembler.get_state_variable_from_storage( address=address, params=[a.strip() for a in args.storage_slots.strip().split(",")], ) print(storage) elif args.command in DISASSEMBLE_LIST: if disassembler.contracts[0].code: print("Runtime Disassembly: \n" + disassembler.contracts[0].get_easm()) if disassembler.contracts[0].creation_code: print("Disassembly: \n" + disassembler.contracts[0].get_creation_easm()) elif args.command == SAFE_FUNCTIONS_COMMAND: args.no_onchain_data = args.disable_dependency_pruning = ( args.unconstrained_storage ) = True args.pruning_factor = 1 function_analyzer = MythrilAnalyzer( strategy=strategy, disassembler=disassembler, address=address, cmd_args=args ) try: report = function_analyzer.fire_lasers( modules=( [m.strip() for m in args.modules.strip().split(",")] if args.modules else None ), transaction_count=1, ) print_function_report(disassembler, report) except DetectorNotFoundError as e: exit_with_error("text", format(e)) except CriticalError as e: exit_with_error("text", "Analysis error encountered: " + format(e)) elif args.command in ANALYZE_LIST + FOUNDRY_LIST: analyzer = MythrilAnalyzer( strategy=strategy, disassembler=disassembler, address=address, cmd_args=args ) if not disassembler.contracts: exit_with_error( args.outform, "input files do not contain any valid contracts" ) if args.attacker_address: try: ACTORS["ATTACKER"] = args.attacker_address except ValueError: exit_with_error(args.outform, "Attacker address is invalid") if args.creator_address: try: ACTORS["CREATOR"] = args.creator_address except ValueError: exit_with_error(args.outform, "Creator address is invalid") if args.graph: html = analyzer.graph_html( contract=analyzer.contracts[0], enable_physics=args.enable_physics, phrackify=args.phrack, transaction_count=args.transaction_count, ) try: with open(args.graph, "w") as f: f.write(html) except Exception as e: exit_with_error(args.outform, "Error saving graph: " + str(e)) elif args.statespace_json: if not analyzer.contracts: exit_with_error( args.outform, "input files do not contain any valid contracts" ) statespace = analyzer.dump_statespace(contract=analyzer.contracts[0]) try: with open(args.statespace_json, "w") as f: json.dump(statespace, f) except Exception as e: exit_with_error(args.outform, "Error saving json: " + str(e)) else: try: report = analyzer.fire_lasers( modules=( [m.strip() for m in args.modules.strip().split(",")] if args.modules else None ), transaction_count=args.transaction_count, ) outputs = { "json": report.as_json(), "jsonv2": report.as_swc_standard_format(), "text": report.as_text(), "markdown": report.as_markdown(), } print(outputs[args.outform]) if len(report.issues) > 0: exit(1) else: exit(0) except DetectorNotFoundError as e: exit_with_error(args.outform, format(e)) except CriticalError as e: exit_with_error( args.outform, "Analysis error encountered: " + format(e) ) else: parser.print_help() def contract_hash_to_address(args: Namespace): """ prints the hash from function signature :param args: :return: """ print(MythrilDisassembler.hash_for_function_signature(args.func_name)) sys.exit() def parse_args_and_execute(parser: ArgumentParser, args: Namespace) -> None: """ Parses the arguments :param parser: The parser :param args: The args """ if args.epic: path = os.path.dirname(os.path.realpath(__file__)) sys.argv.remove("--epic") os.system(" ".join(sys.argv) + " | python3 " + path + "/epic.py") sys.exit() if args.command not in COMMAND_LIST or args.command is None: parser.print_help() sys.exit() if args.command == VERSION_COMMAND: if args.outform == "json": print(json.dumps({"version_str": VERSION})) else: print("Mythril version {}".format(VERSION)) sys.exit() if args.command == LIST_DETECTORS_COMMAND: modules = [] for module in ModuleLoader().get_detection_modules(): modules.append({"classname": type(module).__name__, "title": module.name}) if args.outform == "json": print(json.dumps(modules)) else: for module_data in modules: print("{}: {}".format(module_data["classname"], module_data["title"])) sys.exit() if args.command == HELP_COMMAND: parser.print_help() sys.exit() if args.command in CONCOLIC_LIST: _ = MythrilConfig.init_mythril_dir() with open(args.input) as f: concrete_data = json.load(f) output_list = concolic_execution( concrete_data, args.branches.split(","), args.solver_timeout ) json.dump(output_list, sys.stdout, indent=4) sys.exit() # Parse cmdline args validate_args(args) try: if args.command == FUNCTION_TO_HASH_COMMAND: contract_hash_to_address(args) config = set_config(args) solc_json = getattr(args, "solc_json", None) solv = getattr(args, "solv", None) solc_args = getattr(args, "solc_args", None) disassembler = MythrilDisassembler( eth=config.eth, solc_version=solv, solc_settings_json=solc_json, solc_args=solc_args, ) address = load_code(disassembler, args) execute_command( disassembler=disassembler, address=address, parser=parser, args=args ) except CriticalError as ce: exit_with_error(getattr(args, "outform", "text"), str(ce)) except Exception: exit_with_error(getattr(args, "outform", "text"), traceback.format_exc()) if __name__ == "__main__": main() ================================================ FILE: mythril/interfaces/epic.py ================================================ """Don't ask.""" #!/usr/bin/env python # # "THE BEER-WARE LICENSE" (Revision 43~maze) # # wrote these files. As long as you retain this notice you # can do whatever you want with this stuff. If we meet some day, and you think # this stuff is worth it, you can buy me a beer in return. # https://github.com/tehmaze/lolcat import argparse import atexit import math import os import random import re import sys import time PY3 = sys.version_info >= (3,) # Reset terminal colors at exit def reset(): """""" sys.stdout.write("\x1b[0m") sys.stdout.flush() atexit.register(reset) STRIP_ANSI = re.compile(r"\x1b\[(\d+)(;\d+)?(;\d+)?[m|K]") COLOR_ANSI = ( (0x00, 0x00, 0x00), (0xCD, 0x00, 0x00), (0x00, 0xCD, 0x00), (0xCD, 0xCD, 0x00), (0x00, 0x00, 0xEE), (0xCD, 0x00, 0xCD), (0x00, 0xCD, 0xCD), (0xE5, 0xE5, 0xE5), (0x7F, 0x7F, 0x7F), (0xFF, 0x00, 0x00), (0x00, 0xFF, 0x00), (0xFF, 0xFF, 0x00), (0x5C, 0x5C, 0xFF), (0xFF, 0x00, 0xFF), (0x00, 0xFF, 0xFF), (0xFF, 0xFF, 0xFF), ) class LolCat(object): """Cats lel.""" def __init__(self, mode=256, output=sys.stdout): self.mode = mode self.output = output def _distance(self, rgb1, rgb2): return sum(map(lambda c: (c[0] - c[1]) ** 2, zip(rgb1, rgb2))) def ansi(self, rgb): """ :param rgb: :return: """ r, g, b = rgb if self.mode in (8, 16): colors = COLOR_ANSI[: self.mode] matches = [ (self._distance(c, map(int, rgb)), i) for i, c in enumerate(colors) ] matches.sort() color = matches[0][1] return "3%d" % (color,) else: gray_possible = True sep = 2.5 while gray_possible: if r < sep or g < sep or b < sep: gray = r < sep and g < sep and b < sep gray_possible = False sep += 42.5 if gray: color = 232 + int(float(sum(rgb) / 33.0)) else: color = sum( [16] + [ int(6 * float(val) / 256) * mod for val, mod in zip(rgb, [36, 6, 1]) ] ) return "38;5;%d" % (color,) def wrap(self, *codes): """ :param codes: :return: """ return "\x1b[%sm" % ("".join(codes),) def rainbow(self, freq, i): """ :param freq: :param i: :return: """ r = math.sin(freq * i) * 127 + 128 g = math.sin(freq * i + 2 * math.pi / 3) * 127 + 128 b = math.sin(freq * i + 4 * math.pi / 3) * 127 + 128 return [r, g, b] def cat(self, fd, options): """ :param fd: :param options: """ if options.animate: self.output.write("\x1b[?25l") for line in fd: options.os += 1 self.println(line, options) if options.animate: self.output.write("\x1b[?25h") def println(self, s, options): """ :param s: :param options: """ s = s.rstrip() if options.force or self.output.isatty(): s = STRIP_ANSI.sub("", s) if options.animate: self.println_ani(s, options) else: self.println_plain(s, options) self.output.write("\n") self.output.flush() def println_ani(self, s, options): """ :param s: :param options: :return: """ if not s: return for _ in range(1, options.duration): self.output.write("\x1b[%dD" % (len(s),)) self.output.flush() options.os += options.spread self.println_plain(s, options) time.sleep(1.0 / options.speed) def println_plain(self, s, options): """ :param s: :param options: """ for i, c in enumerate(s if PY3 else s.decode(options.charset_py2, "replace")): rgb = self.rainbow(options.freq, options.os + i / options.spread) self.output.write( "".join( [ self.wrap(self.ansi(rgb)), c if PY3 else c.encode(options.charset_py2, "replace"), ] ) ) def detect_mode(term_hint="xterm-256color"): """Poor-mans color mode detection.""" if "ANSICON" in os.environ: return 16 elif os.environ.get("ConEmuANSI", "OFF") == "ON": return 256 else: term = os.environ.get("TERM", term_hint) if term.endswith("-256color") or term in ("xterm", "screen"): return 256 elif term.endswith("-color") or term in ("rxvt",): return 16 else: return 256 # optimistic default def run(): """Main entry point.""" parser = argparse.ArgumentParser(usage=r"%prog [] [file ...]") parser.add_argument( "-p", "--spread", type=float, default=3.0, help="Rainbow spread" ) parser.add_argument( "-F", "--freq", type=float, default=0.1, help="Rainbow frequency" ) parser.add_argument("-S", "--seed", type=int, default=0, help="Rainbow seed") parser.add_argument( "-a", "--animate", action="store_true", default=False, help="Enable psychedelics", ) parser.add_argument( "-d", "--duration", type=int, default=12, help="Animation duration" ) parser.add_argument( "-s", "--speed", type=float, default=20.0, help="Animation speed" ) parser.add_argument( "-f", "--force", action="store_true", default=False, help="Force colour even when stdout is not a tty", ) parser.add_argument( "-3", action="store_const", dest="mode", const=8, help="Force 3 bit colour mode" ) parser.add_argument( "-4", action="store_const", dest="mode", const=16, help="Force 4 bit colour mode", ) parser.add_argument( "-8", action="store_const", dest="mode", const=256, help="Force 8 bit colour mode", ) parser.add_argument( "-c", "--charset-py2", default="utf-8", help="Manually set a charset to convert from, for python 2.7", ) options = parser.parse_args() options.os = random.randint(0, 256) if options.seed == 0 else options.seed options.mode = options.mode or detect_mode() lolcat = LolCat(mode=options.mode) args = ["-"] for filename in args: if filename == "-": lolcat.cat(sys.stdin, options) else: try: with open(filename, "r") as handle: lolcat.cat(handle, options) except IOError as error: sys.stderr.write(str(error) + "\n") if __name__ == "__main__": sys.exit(run()) ================================================ FILE: mythril/laser/__init__.py ================================================ ================================================ FILE: mythril/laser/ethereum/__init__.py ================================================ ================================================ FILE: mythril/laser/ethereum/call.py ================================================ """This module contains the business logic used by Instruction in instructions.py to get the necessary elements from the stack and determine the parameters for the new global state.""" import logging import re from typing import List, Optional, Union, cast from eth.constants import GAS_CALLSTIPEND import mythril.laser.ethereum.util as util from mythril.laser.ethereum import natives from mythril.laser.ethereum.instruction_data import calculate_native_gas from mythril.laser.ethereum.natives import PRECOMPILE_COUNT, PRECOMPILE_FUNCTIONS from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.calldata import ( BaseCalldata, ConcreteCalldata, SymbolicCalldata, ) from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.util import insert_ret_val from mythril.laser.smt import BitVec, Expression, If, simplify, symbol_factory from mythril.support.loader import DynLoader """ This module contains the business logic used by Instruction in instructions.py to get the necessary elements from the stack and determine the parameters for the new global state. """ log = logging.getLogger(__name__) SYMBOLIC_CALLDATA_SIZE = 320 # Used when copying symbolic calldata def get_call_parameters( global_state: GlobalState, dynamic_loader: DynLoader, with_value=False ): """Gets call parameters from global state Pops the values from the stack and determines output parameters. :param global_state: state to look in :param dynamic_loader: dynamic loader to use :param with_value: whether to pop the value argument from the stack :return: callee_account, call_data, value, call_data_type, gas """ gas, to = global_state.mstate.pop(2) value = global_state.mstate.pop() if with_value else 0 ( memory_input_offset, memory_input_size, memory_out_offset, memory_out_size, ) = global_state.mstate.pop(4) callee_address = get_callee_address(global_state, dynamic_loader, to) callee_account = None call_data = get_call_data(global_state, memory_input_offset, memory_input_size) if isinstance(callee_address, BitVec) or ( isinstance(callee_address, str) and (int(callee_address, 16) > PRECOMPILE_COUNT or int(callee_address, 16) == 0) ): callee_account = get_callee_account( global_state, callee_address, dynamic_loader ) gas = gas + If(value > 0, symbol_factory.BitVecVal(GAS_CALLSTIPEND, gas.size()), 0) return ( callee_address, callee_account, call_data, value, gas, memory_out_offset, memory_out_size, ) def _get_padded_hex_address(address: int) -> str: hex_address = hex(address)[2:] return "0x{}{}".format("0" * (40 - len(hex_address)), hex_address) def get_callee_address( global_state: GlobalState, dynamic_loader: DynLoader, symbolic_to_address: Expression, ): """Gets the address of the callee. :param global_state: state to look in :param dynamic_loader: dynamic loader to use :param symbolic_to_address: The (symbolic) callee address :return: Address of the callee """ environment = global_state.environment try: callee_address = _get_padded_hex_address( util.get_concrete_int(symbolic_to_address) ) except TypeError: log.debug("Symbolic call encountered") match = re.search(r"Storage\[(\d+)\]", str(simplify(symbolic_to_address))) if match is None or dynamic_loader is None: return symbolic_to_address index = int(match.group(1)) log.debug("Dynamic contract address at storage index {}".format(index)) # attempt to read the contract address from instance storage try: callee_address = dynamic_loader.read_storage( "0x{:040X}".format(environment.active_account.address.value), index ) # TODO: verify whether this happens or not except: return symbolic_to_address # testrpc simply returns the address, geth response is more elaborate. if not re.match(r"^0x[0-9a-f]{40}$", callee_address): callee_address = "0x" + callee_address[26:] return callee_address def get_callee_account( global_state: GlobalState, callee_address: Union[str, BitVec], dynamic_loader: DynLoader, ): """Gets the callees account from the global_state. :param global_state: state to look in :param callee_address: address of the callee :param dynamic_loader: dynamic loader to use :return: Account belonging to callee """ if isinstance(callee_address, BitVec): if callee_address.symbolic: return Account(callee_address, balances=global_state.world_state.balances) else: callee_address = hex(callee_address.value)[2:] return global_state.world_state.accounts_exist_or_load( callee_address, dynamic_loader ) def get_call_data( global_state: GlobalState, memory_start: Union[int, BitVec], memory_size: Union[int, BitVec], ): """Gets call_data from the global_state. :param global_state: state to look in :param memory_start: Start index :param memory_size: Size :return: Tuple containing: call_data array from memory or empty array if symbolic, type found """ state = global_state.mstate transaction_id = "{}_internalcall".format(global_state.current_transaction.id) memory_start = cast( BitVec, ( symbol_factory.BitVecVal(memory_start, 256) if isinstance(memory_start, int) else memory_start ), ) memory_size = cast( BitVec, ( symbol_factory.BitVecVal(memory_size, 256) if isinstance(memory_size, int) else memory_size ), ) if memory_size.symbolic: memory_size = SYMBOLIC_CALLDATA_SIZE try: calldata_from_mem = state.memory[ util.get_concrete_int(memory_start) : util.get_concrete_int( memory_start + memory_size ) ] return ConcreteCalldata(transaction_id, calldata_from_mem) except TypeError: log.debug("Unsupported symbolic memory offset and size") return SymbolicCalldata(transaction_id) def native_call( global_state: GlobalState, callee_address: Union[str, BitVec], call_data: BaseCalldata, memory_out_offset: Union[int, Expression], memory_out_size: Union[int, Expression], ) -> Optional[List[GlobalState]]: if isinstance(callee_address, BitVec) or not ( 0 < int(callee_address, 16) <= PRECOMPILE_COUNT ): return None # Disabled due to issues with how multi contract calls are handled with some older solc versions """ if hevm_cheat_code.is_cheat_address(callee_address): log.info("HEVM cheat code address triggered") handle_cheat_codes( global_state, callee_address, call_data, memory_out_offset, memory_out_size ) return [global_state] """ log.debug("Native contract called: " + callee_address) try: mem_out_start = util.get_concrete_int(memory_out_offset) mem_out_sz = util.get_concrete_int(memory_out_size) except TypeError: insert_ret_val(global_state) log.debug("CALL with symbolic start or offset not supported") return [global_state] call_address_int = int(callee_address, 16) native_gas_min, native_gas_max = calculate_native_gas( global_state.mstate.calculate_extension_size(mem_out_start, mem_out_sz), PRECOMPILE_FUNCTIONS[call_address_int - 1].__name__, ) global_state.mstate.min_gas_used += native_gas_min global_state.mstate.max_gas_used += native_gas_max global_state.mstate.mem_extend(mem_out_start, mem_out_sz) try: data = natives.native_contracts(call_address_int, call_data) except natives.NativeContractException: for i in range(mem_out_sz): global_state.mstate.memory[mem_out_start + i] = global_state.new_bitvec( PRECOMPILE_FUNCTIONS[call_address_int - 1].__name__ + "(" + str(call_data) + ")", 8, ) insert_ret_val(global_state) return [global_state] for i in range( min(len(data), mem_out_sz) ): # If more data is used then it's chopped off global_state.mstate.memory[mem_out_start + i] = data[i] insert_ret_val(global_state) return [global_state] ================================================ FILE: mythril/laser/ethereum/cfg.py ================================================ """This module.""" from enum import Enum from typing import TYPE_CHECKING, Dict, List from flags import Flags from mythril.laser.ethereum.state.constraints import Constraints if TYPE_CHECKING: from mythril.laser.ethereum.state.global_state import GlobalState class JumpType(Enum): """An enum to represent the types of possible JUMP scenarios.""" CONDITIONAL = 1 UNCONDITIONAL = 2 CALL = 3 RETURN = 4 Transaction = 5 class NodeFlags(Flags): """A collection of flags to denote the type a call graph node can have.""" def __or__(self, other) -> "NodeFlags": return super().__or__(other) FUNC_ENTRY = 1 CALL_RETURN = 2 class Node: """The representation of a call graph node.""" def __init__( self, contract_name: str, start_addr=0, constraints=None, function_name="unknown", ) -> None: """ :param contract_name: :param start_addr: :param constraints: """ constraints = constraints if constraints else Constraints() self.contract_name = contract_name self.start_addr = start_addr self.states: List[GlobalState] = [] self.constraints = constraints self.function_name = function_name self.flags = NodeFlags() self.uid = hash(self) def get_cfg_dict(self) -> Dict: """ Generate a configuration dictionary for the current state of the contract. :return: A dictionary containing the contract's configuration details. """ code_lines = [ f"{instruction['address']} {instruction['opcode']}" + ( f" {instruction['argument']}" if instruction["opcode"].startswith("PUSH") and "argument" in instruction else "" ) for state in self.states for instruction in [state.get_current_instruction()] ] code = "\\n".join(code_lines) return { "contract_name": self.contract_name, "start_addr": self.start_addr, "function_name": self.function_name, "code": code, } class Edge: """The representation of a call graph edge.""" def __init__( self, node_from: int, node_to: int, edge_type=JumpType.UNCONDITIONAL, condition=None, ) -> None: """ :param node_from: :param node_to: :param edge_type: :param condition: """ self.node_from = node_from self.node_to = node_to self.type = edge_type self.condition = condition def __str__(self) -> str: """ :return: """ return str(self.as_dict) @property def as_dict(self) -> Dict[str, int]: """ :return: """ return {"from": self.node_from, "to": self.node_to} ================================================ FILE: mythril/laser/ethereum/cheat_code.py ================================================ from typing import Union from mythril.laser.ethereum.state.calldata import ( BaseCalldata, ) from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.util import insert_ret_val from mythril.laser.smt import BitVec, Expression class hevm_cheat_code: # https://github.com/dapphub/ds-test/blob/cd98eff28324bfac652e63a239a60632a761790b/src/test.sol address = 0x7109709ECFA91A80626FF3989D68F67F5B1DD12D fail_payload = int( "70ca10bb" + "0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d" + "6661696c65640000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000001", 16, ) assume_sig = 0x4C63E562 @staticmethod def is_cheat_address(address): if int(address, 16) == int("0x7109709ECfa91a80626fF3989D68f67F5b1DD12D", 16): return True if int(address, 16) == int("0x72c68108a82e82617b93d1be0d7975d762035015", 16): return True return False def handle_cheat_codes( global_state: GlobalState, callee_address: Union[str, BitVec], call_data: BaseCalldata, memory_out_offset: Union[int, Expression], memory_out_size: Union[int, Expression], ): insert_ret_val(global_state) pass ================================================ FILE: mythril/laser/ethereum/evm_exceptions.py ================================================ """This module contains EVM exception types used by LASER.""" class VmException(Exception): """The base VM exception type.""" pass class StackUnderflowException(IndexError, VmException): """A VM exception regarding stack underflows.""" pass class StackOverflowException(VmException): """A VM exception regarding stack overflows.""" pass class InvalidJumpDestination(VmException): """A VM exception regarding JUMPs to invalid destinations.""" pass class InvalidInstruction(VmException): """A VM exception denoting an invalid op code has been encountered.""" pass class OutOfGasException(VmException): """A VM exception denoting the current execution has run out of gas.""" pass class WriteProtection(VmException): """A VM exception denoting that a write operation is executed on a write protected environment""" pass ================================================ FILE: mythril/laser/ethereum/function_managers/__init__.py ================================================ from .exponent_function_manager import exponent_function_manager from .keccak_function_manager import KeccakFunctionManager, keccak_function_manager ================================================ FILE: mythril/laser/ethereum/function_managers/exponent_function_manager.py ================================================ import logging from typing import Tuple from mythril.laser.smt import ( And, BitVec, Function, URem, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) log = logging.getLogger(__name__) class ExponentFunctionManager: """ Uses an uninterpreted function for exponentiation with the following properties: 1) power(a, b) > 0 2) if a = 256 => forall i if b = i then power(a, b) = (256 ^ i) % (2^256) Only these two properties are added as to handle indexing of boolean arrays. Caution should be exercised when increasing the conditions since it severely affects the solving time. """ def __init__(self): power = Function("Power", [256, 256], 256) NUMBER_256 = symbol_factory.BitVecVal(256, 256) self.concrete_constraints = And( *[ power(NUMBER_256, symbol_factory.BitVecVal(i, 256)) == symbol_factory.BitVecVal(256**i, 256) for i in range(0, 32) ] ) def create_condition(self, base: BitVec, exponent: BitVec) -> Tuple[BitVec, Bool]: """ Creates a condition for exponentiation :param base: The base of exponentiation :param exponent: The exponent of the exponentiation :return: Tuple of condition and the exponentiation result """ power = Function("Power", [256, 256], 256) exponentiation = power(base, exponent) if exponent.symbolic is False and base.symbolic is False: const_exponentiation = symbol_factory.BitVecVal( pow(base.value, exponent.value, 2**256), 256, annotations=base.annotations.union(exponent.annotations), ) constraint = const_exponentiation == exponentiation return const_exponentiation, constraint constraint = exponentiation > 0 constraint = And(constraint, self.concrete_constraints) if base.value == 256: constraint = And( constraint, power(base, URem(exponent, symbol_factory.BitVecVal(32, 256))) == power(base, exponent), ) return exponentiation, constraint exponent_function_manager = ExponentFunctionManager() ================================================ FILE: mythril/laser/ethereum/function_managers/keccak_function_manager.py ================================================ import logging from typing import Dict, List, Optional, Tuple from mythril.laser.smt import ( ULE, ULT, And, BitVec, Function, Or, URem, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) from mythril.support.support_utils import sha3 TOTAL_PARTS = 10**40 PART = (2**256 - 1) // TOTAL_PARTS INTERVAL_DIFFERENCE = 10**30 log = logging.getLogger(__name__) class KeccakFunctionManager: """ A bunch of uninterpreted functions are considered like keccak256_160 ,... where keccak256_160 means the input of keccak256() is 160 bit number. the range of these functions are constrained to some mutually disjoint intervals All the hashes modulo 64 are 0 as we need a spread among hashes for array type data structures All the functions are kind of one to one due to constraint of the existence of inverse for each encountered input. For more info https://files.sri.inf.ethz.ch/website/papers/sp20-verx.pdf """ hash_matcher = "fffffff" # This is usually the prefix for the hash in the output def __init__(self): self.store_function: Dict[int, Tuple[Function, Function]] = {} self.interval_hook_for_size: Dict[int, int] = {} self._index_counter = TOTAL_PARTS - 34534 self.hash_result_store: Dict[int, List[BitVec]] = {} self.quick_inverse: Dict[BitVec, BitVec] = {} # This is for VMTests self.concrete_hashes: Dict[BitVec, BitVec] = {} self.symbolic_inputs: Dict[int, List[BitVec]] = {} def reset(self): self.store_function = {} self.interval_hook_for_size = {} self.hash_result_store: Dict[int, List[BitVec]] = {} self.quick_inverse = {} self.concrete_hashes = {} self.symbolic_inputs = {} @staticmethod def find_concrete_keccak(data: BitVec) -> BitVec: """ Calculates concrete keccak :param data: input bitvecval :return: concrete keccak output """ keccak = symbol_factory.BitVecVal( int.from_bytes( sha3(data.value.to_bytes(data.size() // 8, byteorder="big")), "big" ), 256, ) return keccak def get_function(self, length: int) -> Tuple[Function, Function]: """ Returns the keccak functions for the corresponding length :param length: input size :return: tuple of keccak and it's inverse """ try: func, inverse = self.store_function[length] except KeyError: func = Function("keccak256_{}".format(length), [length], 256) inverse = Function("keccak256_{}-1".format(length), [256], length) self.store_function[length] = (func, inverse) self.hash_result_store[length] = [] return func, inverse @staticmethod def get_empty_keccak_hash() -> BitVec: """ returns sha3("") :return: """ val = 89477152217924674838424037953991966239322087453347756267410168184682657981552 return symbol_factory.BitVecVal(val, 256) def create_keccak(self, data: BitVec) -> BitVec: """ Creates Keccak of the data :param data: input :return: Tuple of keccak and the condition it should satisfy """ length = data.size() func, _ = self.get_function(length) if data.symbolic is False: concrete_hash = self.find_concrete_keccak(data) self.concrete_hashes[data] = concrete_hash return concrete_hash if length not in self.symbolic_inputs: self.symbolic_inputs[length] = [] self.symbolic_inputs[length].append(data) self.hash_result_store[length].append(func(data)) return func(data) def create_conditions(self) -> Bool: condition = symbol_factory.Bool(True) for inputs_list in self.symbolic_inputs.values(): for symbolic_input in inputs_list: condition = And( condition, self._create_condition(func_input=symbolic_input) ) for concrete_input, concrete_hash in self.concrete_hashes.items(): func, inverse = self.get_function(concrete_input.size()) condition = And( condition, func(concrete_input) == concrete_hash, inverse(func(concrete_input)) == concrete_input, ) return condition def get_concrete_hash_data(self, model) -> Dict[int, List[Optional[int]]]: """ returns concrete values of hashes in the self.hash_result_store :param model: The z3 model to query for concrete values :return: A dictionary with concrete hashes { : [, ]} """ concrete_hashes: Dict[int, List[Optional[int]]] = {} for size in self.hash_result_store: concrete_hashes[size] = [] for val in self.hash_result_store[size]: eval_ = model.eval(val.raw) try: concrete_val = eval_.as_long() concrete_hashes[size].append(concrete_val) except AttributeError: continue return concrete_hashes def _create_condition(self, func_input: BitVec) -> Bool: """ Creates the constraints for hash :param func_input: input of the hash :return: condition """ length = func_input.size() func, inv = self.get_function(length) try: index = self.interval_hook_for_size[length] except KeyError: self.interval_hook_for_size[length] = self._index_counter index = self._index_counter self._index_counter -= INTERVAL_DIFFERENCE lower_bound = index * PART upper_bound = lower_bound + PART cond = And( inv(func(func_input)) == func_input, ULE(symbol_factory.BitVecVal(lower_bound, 256), func(func_input)), ULT(func(func_input), symbol_factory.BitVecVal(upper_bound, 256)), URem(func(func_input), symbol_factory.BitVecVal(64, 256)) == 0, ) concrete_cond = symbol_factory.Bool(False) for key, keccak in self.concrete_hashes.items(): if key.size() == func_input.size(): hash_eq = And(func(func_input) == keccak, key == func_input) concrete_cond = Or(concrete_cond, hash_eq) return And(inv(func(func_input)) == func_input, Or(cond, concrete_cond)) keccak_function_manager = KeccakFunctionManager() ================================================ FILE: mythril/laser/ethereum/instruction_data.py ================================================ from typing import Tuple from eth._utils.numeric import ceil32 from eth.constants import ( GAS_ECRECOVER, GAS_IDENTITY, GAS_IDENTITYWORD, GAS_RIPEMD160, GAS_RIPEMD160WORD, GAS_SHA3, GAS_SHA3WORD, GAS_SHA256, GAS_SHA256WORD, ) from mythril.support.opcodes import GAS, OPCODES, STACK def calculate_sha3_gas(length: int): """ :param length: :return: """ gas_val = GAS_SHA3 + GAS_SHA3WORD * (ceil32(length) // 32) return gas_val, gas_val def calculate_native_gas(size: int, contract: str): """ :param size: :param contract: :return: """ gas_value = 0 word_num = ceil32(size) // 32 if contract == "ecrecover": gas_value = GAS_ECRECOVER elif contract == "sha256": gas_value = GAS_SHA256 + word_num * GAS_SHA256WORD elif contract == "ripemd160": gas_value = GAS_RIPEMD160 + word_num * GAS_RIPEMD160WORD elif contract == "identity": gas_value = GAS_IDENTITY + word_num * GAS_IDENTITYWORD else: # TODO: Add gas for other precompiles, computation should be shifted to natives.py # as some data isn't available here pass return gas_value, gas_value def get_opcode_gas(opcode: str) -> Tuple[int, int]: return OPCODES[opcode][GAS] def get_required_stack_elements(opcode: str) -> int: return OPCODES[opcode][STACK][0] ================================================ FILE: mythril/laser/ethereum/instructions.py ================================================ """This module contains a representation class for EVM instructions and transitions between them.""" import logging from copy import copy, deepcopy from typing import Callable, List, Tuple, Union, cast import mythril.laser.ethereum.util as helper from mythril.disassembler.disassembly import Disassembly from mythril.exceptions import UnsatError from mythril.laser.ethereum import util from mythril.laser.ethereum.call import ( SYMBOLIC_CALLDATA_SIZE, get_call_data, get_call_parameters, native_call, ) from mythril.laser.ethereum.evm_exceptions import ( InvalidInstruction, InvalidJumpDestination, OutOfGasException, StackUnderflowException, VmException, WriteProtection, ) from mythril.laser.ethereum.function_managers import ( exponent_function_manager, keccak_function_manager, ) from mythril.laser.ethereum.instruction_data import calculate_sha3_gas, get_opcode_gas from mythril.laser.ethereum.state.calldata import ConcreteCalldata, SymbolicCalldata from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.return_data import ReturnData from mythril.laser.ethereum.transaction import ( ContractCreationTransaction, MessageCallTransaction, TransactionStartSignal, tx_id_manager, ) from mythril.laser.smt import ( UGE, UGT, ULT, BitVec, Concat, Expression, Extract, If, LShR, Not, SRem, UDiv, URem, is_false, simplify, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) from mythril.support.loader import DynLoader from mythril.support.model import get_model from mythril.support.support_utils import get_code_hash log = logging.getLogger(__name__) TT256 = symbol_factory.BitVecVal(0, 256) TT256M1 = symbol_factory.BitVecVal(2**256 - 1, 256) def transfer_ether( global_state: GlobalState, sender: BitVec, receiver: BitVec, value: Union[int, BitVec], ): """ Perform an Ether transfer between two accounts :param global_state: The global state in which the Ether transfer occurs :param sender: The sender of the Ether :param receiver: The recipient of the Ether :param value: The amount of Ether to send :return: """ value = value if isinstance(value, BitVec) else symbol_factory.BitVecVal(value, 256) global_state.world_state.constraints.append( UGE(global_state.world_state.balances[sender], value) ) global_state.world_state.balances[receiver] += value global_state.world_state.balances[sender] -= value class StateTransition(object): """Decorator that handles global state copy and original return. This decorator calls the decorated instruction mutator function on a copy of the state that is passed to it. After the call, the resulting new states' program counter is automatically incremented if `increment_pc=True`. """ def __init__( self, increment_pc=True, enable_gas=True, is_state_mutation_instruction=False ): """ :param increment_pc: :param enable_gas: :param is_state_mutation_instruction: The function mutates state """ self.increment_pc = increment_pc self.enable_gas = enable_gas self.is_state_mutation_instruction = is_state_mutation_instruction @staticmethod def call_on_state_copy(func: Callable, func_obj: "Instruction", state: GlobalState): """ :param func: :param func_obj: :param state: :return: """ global_state_copy = copy(state) return func(func_obj, global_state_copy) def increment_states_pc(self, states: List[GlobalState]) -> List[GlobalState]: """ :param states: :return: """ if self.increment_pc: for state in states: state.mstate.pc += 1 return states @staticmethod def check_gas_usage_limit(global_state: GlobalState): """ :param global_state: :return: """ global_state.mstate.check_gas() if isinstance(global_state.current_transaction.gas_limit, BitVec): value = global_state.current_transaction.gas_limit.value if value is None: return global_state.current_transaction.gas_limit = value if ( global_state.mstate.min_gas_used >= global_state.current_transaction.gas_limit ): raise OutOfGasException() def accumulate_gas(self, global_state: GlobalState): """ :param global_state: :return: """ if not self.enable_gas: return global_state opcode = global_state.instruction["opcode"] min_gas, max_gas = get_opcode_gas(opcode) global_state.mstate.min_gas_used += min_gas global_state.mstate.max_gas_used += max_gas self.check_gas_usage_limit(global_state) return global_state def __call__(self, func: Callable) -> Callable: def wrapper( func_obj: "Instruction", global_state: GlobalState ) -> List[GlobalState]: """ :param func_obj: :param global_state: :return: """ if self.is_state_mutation_instruction and global_state.environment.static: raise WriteProtection( "The function {} cannot be executed in a static call".format( func.__name__[:-1] ) ) new_global_states = self.call_on_state_copy(func, func_obj, global_state) new_global_states = [ self.accumulate_gas(state) for state in new_global_states ] return self.increment_states_pc(new_global_states) return wrapper class Instruction: """Instruction class is used to mutate a state according to the current instruction.""" def __init__( self, op_code: str, dynamic_loader: DynLoader, pre_hooks: List[Callable] = None, post_hooks: List[Callable] = None, ) -> None: """ :param op_code: :param dynamic_loader: :param iprof: """ self.dynamic_loader = dynamic_loader self.op_code = op_code.upper() self.pre_hook = pre_hooks if pre_hooks else [] self.post_hook = post_hooks if post_hooks else [] def _execute_pre_hooks(self, global_state: GlobalState): for hook in self.pre_hook: hook(global_state) def _execute_post_hooks(self, global_state: GlobalState): for hook in self.post_hook: hook(global_state) def evaluate(self, global_state: GlobalState, post=False) -> List[GlobalState]: """Performs the mutation for this instruction. :param global_state: :param post: :return: """ # Generalize some ops log.debug("Evaluating %s at %i", self.op_code, global_state.mstate.pc) op = self.op_code.lower() if self.op_code.startswith("PUSH"): op = "push" elif self.op_code.startswith("DUP"): op = "dup" elif self.op_code.startswith("SWAP"): op = "swap" elif self.op_code.startswith("LOG"): op = "log" instruction_mutator = ( getattr(self, op + "_", None) if not post else getattr(self, op + "_" + "post", None) ) if instruction_mutator is None: raise NotImplementedError self._execute_pre_hooks(global_state) result = instruction_mutator(global_state) self._execute_post_hooks(global_state) return result @StateTransition() def jumpdest_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ return [global_state] @StateTransition() def push_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ push_instruction = global_state.get_current_instruction() push_value = push_instruction.get("argument", 0) try: length_of_value = 2 * int(push_instruction["opcode"][4:]) except ValueError: raise VmException("Invalid Push instruction") if length_of_value == 0: global_state.mstate.stack.append(symbol_factory.BitVecVal(0, 256)) elif isinstance(push_value, tuple): if isinstance(push_value[0], int): new_value = symbol_factory.BitVecVal(push_value[0], 8) else: new_value = push_value[0] if len(push_value) > 1: for val in push_value[1:]: if isinstance(val, int): new_value = Concat(new_value, symbol_factory.BitVecVal(val, 8)) else: new_value = Concat(new_value, val) pad_length = length_of_value // 2 - len(push_value) if pad_length > 0: new_value = Concat(new_value, symbol_factory.BitVecVal(0, pad_length)) if new_value.size() < 256: new_value = Concat( symbol_factory.BitVecVal(0, 256 - new_value.size()), new_value ) global_state.mstate.stack.append(new_value) else: push_value += "0" * max(length_of_value - (len(push_value) - 2), 0) global_state.mstate.stack.append( symbol_factory.BitVecVal(int(push_value, 16), 256) ) return [global_state] @StateTransition() def dup_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ value = int(global_state.get_current_instruction()["opcode"][3:], 10) global_state.mstate.stack.append(global_state.mstate.stack[-value]) return [global_state] @StateTransition() def swap_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ depth = int(self.op_code[4:]) stack = global_state.mstate.stack stack[-depth - 1], stack[-1] = stack[-1], stack[-depth - 1] return [global_state] @StateTransition() def pop_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.pop() return [global_state] @StateTransition() def and_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ stack = global_state.mstate.stack op1, op2 = stack.pop(), stack.pop() if isinstance(op1, Bool): op1 = If( op1, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) if isinstance(op2, Bool): op2 = If( op2, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) if not isinstance(op1, Expression): op1 = symbol_factory.BitVecVal(op1, 256) if not isinstance(op2, Expression): op2 = symbol_factory.BitVecVal(op2, 256) stack.append(op1 & op2) return [global_state] @StateTransition() def or_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ stack = global_state.mstate.stack op1, op2 = stack.pop(), stack.pop() if isinstance(op1, Bool): op1 = If( op1, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) if isinstance(op2, Bool): op2 = If( op2, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) stack.append(op1 | op2) return [global_state] @StateTransition() def xor_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ mstate = global_state.mstate mstate.stack.append(mstate.stack.pop() ^ mstate.stack.pop()) return [global_state] @StateTransition() def not_(self, global_state: GlobalState): """ :param global_state: :return: """ mstate = global_state.mstate mstate.stack.append(TT256M1 - mstate.stack.pop()) return [global_state] @StateTransition() def byte_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ mstate = global_state.mstate op0, op1 = mstate.stack.pop(), mstate.stack.pop() if not isinstance(op1, Expression): op1 = symbol_factory.BitVecVal(op1, 256) try: index = util.get_concrete_int(op0) offset = (31 - index) * 8 if offset >= 0: result: Union[int, Expression] = simplify( Concat( symbol_factory.BitVecVal(0, 248), Extract(offset + 7, offset, op1), ) ) else: result = 0 except TypeError: log.debug("BYTE: Unsupported symbolic byte offset") result = global_state.new_bitvec( str(simplify(op1)) + "[" + str(simplify(op0)) + "]", 256 ) mstate.stack.append(result) return [global_state] # Arithmetic @StateTransition() def add_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append( ( helper.pop_bitvec(global_state.mstate) + helper.pop_bitvec(global_state.mstate) ) ) return [global_state] @StateTransition() def sub_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append( ( helper.pop_bitvec(global_state.mstate) - helper.pop_bitvec(global_state.mstate) ) ) return [global_state] @StateTransition() def mul_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append( ( helper.pop_bitvec(global_state.mstate) * helper.pop_bitvec(global_state.mstate) ) ) return [global_state] @StateTransition() def div_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ op0, op1 = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) if op1 == 0: global_state.mstate.stack.append(symbol_factory.BitVecVal(0, 256)) else: global_state.mstate.stack.append(UDiv(op0, op1)) return [global_state] @StateTransition() def sdiv_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ s0, s1 = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) if s1 == 0: global_state.mstate.stack.append(symbol_factory.BitVecVal(0, 256)) else: global_state.mstate.stack.append(s0 / s1) return [global_state] @StateTransition() def mod_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ s0, s1 = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(0 if s1 == 0 else URem(s0, s1)) return [global_state] @StateTransition() def shl_(self, global_state: GlobalState) -> List[GlobalState]: shift, value = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(value << shift) return [global_state] @StateTransition() def shr_(self, global_state: GlobalState) -> List[GlobalState]: shift, value = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(LShR(value, shift)) return [global_state] @StateTransition() def sar_(self, global_state: GlobalState) -> List[GlobalState]: shift, value = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(value >> shift) return [global_state] @StateTransition() def smod_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ s0, s1 = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(0 if s1 == 0 else SRem(s0, s1)) return [global_state] @StateTransition() def addmod_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ s0, s1, s2 = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(URem(URem(s0, s2) + URem(s1, s2), s2)) return [global_state] @StateTransition() def mulmod_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ s0, s1, s2 = ( util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), ) global_state.mstate.stack.append(URem(URem(s0, s2) * URem(s1, s2), s2)) return [global_state] @StateTransition() def exp_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate base, exponent = util.pop_bitvec(state), util.pop_bitvec(state) exponentiation, constraint = exponent_function_manager.create_condition( base, exponent ) state.stack.append(exponentiation) global_state.world_state.constraints.append(constraint) return [global_state] @StateTransition() def signextend_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ mstate = global_state.mstate s0, s1 = mstate.stack.pop(), mstate.stack.pop() testbit = s0 * symbol_factory.BitVecVal(8, 256) + symbol_factory.BitVecVal( 7, 256 ) set_testbit = symbol_factory.BitVecVal(1, 256) << testbit sign_bit_set = simplify(Not(s1 & set_testbit == 0)) mstate.stack.append( simplify( If( s0 <= 31, If( sign_bit_set, s1 | (TT256 - set_testbit), s1 & (set_testbit - 1) ), s1, ) ) ) return [global_state] # Comparisons @StateTransition() def lt_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate exp = ULT(util.pop_bitvec(state), util.pop_bitvec(state)) state.stack.append(exp) return [global_state] @StateTransition() def gt_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate op1, op2 = util.pop_bitvec(state), util.pop_bitvec(state) exp = UGT(op1, op2) state.stack.append(exp) return [global_state] @StateTransition() def slt_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate exp = util.pop_bitvec(state) < util.pop_bitvec(state) state.stack.append(exp) return [global_state] @StateTransition() def sgt_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate exp = util.pop_bitvec(state) > util.pop_bitvec(state) state.stack.append(exp) return [global_state] @StateTransition() def eq_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate op1 = state.stack.pop() op2 = state.stack.pop() if isinstance(op1, Bool): op1 = If( op1, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) if isinstance(op2, Bool): op2 = If( op2, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) exp = op1 == op2 state.stack.append(exp) return [global_state] @StateTransition() def iszero_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate val = state.stack.pop() exp = Not(val) if isinstance(val, Bool) else val == 0 exp = If( exp, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256) ) state.stack.append(simplify(exp)) return [global_state] # Call data @StateTransition() def callvalue_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate environment = global_state.environment state.stack.append(environment.callvalue) return [global_state] @StateTransition() def calldataload_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate environment = global_state.environment op0 = state.stack.pop() value = environment.calldata.get_word_at(op0) state.stack.append(value) return [global_state] @StateTransition() def calldatasize_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.environment.calldata.calldatasize) return [global_state] @staticmethod def _calldata_copy_helper(global_state, mstate, mstart, dstart, size): environment = global_state.environment try: mstart = util.get_concrete_int(mstart) except TypeError: log.debug("Unsupported symbolic memory offset in CALLDATACOPY") return [global_state] try: dstart: Union[int, BitVec] = util.get_concrete_int(dstart) except TypeError: log.debug("Unsupported symbolic calldata offset in CALLDATACOPY") dstart = simplify(dstart) try: size: Union[int, BitVec] = util.get_concrete_int(size) except TypeError: log.debug("Unsupported symbolic size in CALLDATACOPY") size = SYMBOLIC_CALLDATA_SIZE # The excess size will get overwritten size = cast(int, size) if size > 0: try: mstate.mem_extend(mstart, size) except TypeError as e: log.debug("Memory allocation error: {}".format(e)) mstate.mem_extend(mstart, 1) mstate.memory[mstart] = global_state.new_bitvec( "calldata_" + str(environment.active_account.contract_name) + "[" + str(dstart) + ": + " + str(size) + "]", 8, ) return [global_state] try: i_data = dstart new_memory = [] for i in range(size): value = environment.calldata[i_data] new_memory.append(value) i_data = ( i_data + 1 if isinstance(i_data, int) else simplify(cast(BitVec, i_data) + 1) ) for i in range(len(new_memory)): mstate.memory[i + mstart] = new_memory[i] except IndexError: log.debug("Exception copying calldata to memory") mstate.memory[mstart] = global_state.new_bitvec( "calldata_" + str(environment.active_account.contract_name) + "[" + str(dstart) + ": + " + str(size) + "]", 8, ) return [global_state] @StateTransition() def calldatacopy_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate op0, op1, op2 = state.stack.pop(), state.stack.pop(), state.stack.pop() if isinstance(global_state.current_transaction, ContractCreationTransaction): log.debug("Attempt to use CALLDATACOPY in creation transaction") return [global_state] return self._calldata_copy_helper(global_state, state, op0, op1, op2) # Environment @StateTransition() def address_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate environment = global_state.environment state.stack.append(environment.address) return [global_state] @StateTransition() def balance_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate address = state.stack.pop() onchain_access = True if address.symbolic is False: try: balance = global_state.world_state.accounts_exist_or_load( address.value, self.dynamic_loader ).balance() except ValueError: onchain_access = False else: onchain_access = False if onchain_access is False: balance = symbol_factory.BitVecVal(0, 256) for account in global_state.world_state.accounts.values(): balance = If(address == account.address, account.balance(), balance) state.stack.append(balance) return [global_state] @StateTransition() def origin_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate environment = global_state.environment state.stack.append(environment.origin) return [global_state] @StateTransition() def caller_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate environment = global_state.environment state.stack.append(environment.sender) return [global_state] @StateTransition() def chainid_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.environment.chainid) return [global_state] @StateTransition() def selfbalance_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ balance = global_state.environment.active_account.balance() global_state.mstate.stack.append(balance) return [global_state] @StateTransition() def codesize_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate environment = global_state.environment disassembly = environment.code calldata = global_state.environment.calldata if isinstance(global_state.current_transaction, ContractCreationTransaction): # Hacky way to ensure constructor arguments work - Pick some reasonably large size. no_of_bytes = len(disassembly.bytecode) // 2 if isinstance(calldata, ConcreteCalldata): no_of_bytes += calldata.size else: no_of_bytes += 0x200 # space for 16 32-byte arguments global_state.world_state.constraints.append( global_state.environment.calldata.size == no_of_bytes ) else: no_of_bytes = len(disassembly.bytecode) // 2 state.stack.append(no_of_bytes) return [global_state] @staticmethod def _sha3_gas_helper(global_state, length): min_gas, max_gas = calculate_sha3_gas(length) global_state.mstate.min_gas_used += min_gas global_state.mstate.max_gas_used += max_gas StateTransition.check_gas_usage_limit(global_state) return global_state @StateTransition(enable_gas=False) def sha3_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate index, op1 = state.stack.pop(), state.stack.pop() try: length = util.get_concrete_int(op1) except TypeError: # Can't access symbolic memory offsets length = 64 global_state.world_state.constraints.append(op1 == length) Instruction._sha3_gas_helper(global_state, length) state.mem_extend(index, length) data_list = [ b if isinstance(b, BitVec) else symbol_factory.BitVecVal(b, 8) for b in state.memory[index : index + length] ] if len(data_list) > 1: data = simplify(Concat(data_list)) elif len(data_list) == 1: data = data_list[0] else: # TODO: handle finding x where func(x)==func("") result = keccak_function_manager.get_empty_keccak_hash() state.stack.append(result) return [global_state] result = keccak_function_manager.create_keccak(data) state.stack.append(result) return [global_state] @StateTransition() def gasprice_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.environment.gasprice) return [global_state] @StateTransition() def basefee_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.environment.basefee) return [global_state] @StateTransition() def codecopy_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ memory_offset, code_offset, size = ( global_state.mstate.stack.pop(), global_state.mstate.stack.pop(), global_state.mstate.stack.pop(), ) code = global_state.environment.code.bytecode if isinstance(code, tuple): log.debug("unsupported symbolic code for CODECOPY") return [global_state] if code.startswith("0x"): code = code[2:] code_size = len(code) // 2 if isinstance(global_state.current_transaction, ContractCreationTransaction): # Treat creation code after the expected disassembly as calldata. # This is a slightly hacky way to ensure that symbolic constructor # arguments work correctly. mstate = global_state.mstate offset = code_offset - code_size log.debug("Copying from code offset: {} with size: {}".format(offset, size)) if isinstance(global_state.environment.calldata, SymbolicCalldata): if code_offset >= code_size: return self._calldata_copy_helper( global_state, mstate, memory_offset, offset, size ) else: # Copy from both code and calldata appropriately. concrete_code_offset = helper.get_concrete_int(code_offset) concrete_size = helper.get_concrete_int(size) code_copy_offset = concrete_code_offset code_copy_size = ( concrete_size if concrete_code_offset + concrete_size <= code_size else code_size - concrete_code_offset ) code_copy_size = code_copy_size if code_copy_size >= 0 else 0 calldata_copy_offset = ( concrete_code_offset - code_size if concrete_code_offset - code_size > 0 else 0 ) calldata_copy_size = concrete_code_offset + concrete_size - code_size calldata_copy_size = ( calldata_copy_size if calldata_copy_size >= 0 else 0 ) [global_state] = self._code_copy_helper( code=global_state.environment.code.bytecode, memory_offset=memory_offset, code_offset=code_copy_offset, size=code_copy_size, op="CODECOPY", global_state=global_state, ) return self._calldata_copy_helper( global_state=global_state, mstate=mstate, mstart=memory_offset + code_copy_size, dstart=calldata_copy_offset, size=calldata_copy_size, ) return self._code_copy_helper( code=global_state.environment.code.bytecode, memory_offset=memory_offset, code_offset=code_offset, size=size, op="CODECOPY", global_state=global_state, ) @StateTransition() def extcodesize_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate addr = state.stack.pop() try: addr = hex(helper.get_concrete_int(addr)) except TypeError: log.debug("unsupported symbolic address for EXTCODESIZE") state.stack.append(global_state.new_bitvec("extcodesize_" + str(addr), 256)) return [global_state] try: code = global_state.world_state.accounts_exist_or_load( addr, self.dynamic_loader ).code.bytecode except (ValueError, AttributeError) as e: log.debug("error accessing contract storage due to: " + str(e)) state.stack.append(global_state.new_bitvec("extcodesize_" + str(addr), 256)) return [global_state] state.stack.append(len(code) // 2) return [global_state] @staticmethod def _code_copy_helper( code: Union[str, Tuple], memory_offset: Union[int, BitVec], code_offset: Union[int, BitVec], size: Union[int, BitVec], op: str, global_state: GlobalState, ) -> List[GlobalState]: try: concrete_memory_offset = helper.get_concrete_int(memory_offset) except TypeError: log.debug("Unsupported symbolic memory offset in {}".format(op)) return [global_state] try: concrete_size = helper.get_concrete_int(size) global_state.mstate.mem_extend(concrete_memory_offset, concrete_size) except TypeError: # except both attribute error and Exception global_state.mstate.mem_extend(concrete_memory_offset, 1) global_state.mstate.memory[concrete_memory_offset] = ( global_state.new_bitvec( "code({})".format( global_state.environment.active_account.contract_name ), 8, ) ) return [global_state] try: concrete_code_offset = helper.get_concrete_int(code_offset) except TypeError: log.debug("Unsupported symbolic code offset in {}".format(op)) global_state.mstate.mem_extend(concrete_memory_offset, concrete_size) for i in range(concrete_size): global_state.mstate.memory[concrete_memory_offset + i] = ( global_state.new_bitvec( "code({})".format( global_state.environment.active_account.contract_name ), 8, ) ) return [global_state] if isinstance(code, str) and code.startswith("0x"): code = code[2:] for i in range(concrete_size): if isinstance(code, str): if 2 * (concrete_code_offset + i + 1) > len(code): break global_state.mstate.memory[concrete_memory_offset + i] = int( code[ 2 * (concrete_code_offset + i) : 2 * (concrete_code_offset + i + 1) ], 16, ) else: if (concrete_code_offset + i + 1) > len(code): break global_state.mstate.memory[concrete_memory_offset + i] = code[ concrete_code_offset + i ] return [global_state] @StateTransition() def extcodecopy_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate addr, memory_offset, code_offset, size = ( state.stack.pop(), state.stack.pop(), state.stack.pop(), state.stack.pop(), ) try: addr = hex(helper.get_concrete_int(addr)) except TypeError: log.debug("unsupported symbolic address for EXTCODECOPY") return [global_state] try: code = global_state.world_state.accounts_exist_or_load( addr, self.dynamic_loader ).code.bytecode except (ValueError, AttributeError) as e: log.debug("error accessing contract storage due to: " + str(e)) return [global_state] return self._code_copy_helper( code=code, memory_offset=memory_offset, code_offset=code_offset, size=size, op="EXTCODECOPY", global_state=global_state, ) @StateTransition() def extcodehash_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: List of global states possible, list of size 1 in this case """ world_state = global_state.world_state stack = global_state.mstate.stack address = Extract(159, 0, stack.pop()) if address.symbolic: code_hash = symbol_factory.BitVecVal(int(get_code_hash(""), 16), 256) elif address.value not in world_state.accounts: code_hash = symbol_factory.BitVecVal(0, 256) else: addr = "0" * (40 - len(hex(address.value)[2:])) + hex(address.value)[2:] code = world_state.accounts_exist_or_load( addr, self.dynamic_loader ).code.bytecode code_hash = symbol_factory.BitVecVal(int(get_code_hash(code), 16), 256) stack.append(code_hash) return [global_state] @StateTransition() def returndatacopy_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate memory_offset, return_offset, size = ( state.stack.pop(), state.stack.pop(), state.stack.pop(), ) try: concrete_memory_offset = helper.get_concrete_int(memory_offset) except TypeError: log.debug("Unsupported symbolic memory offset in RETURNDATACOPY") return [global_state] try: concrete_return_offset = helper.get_concrete_int(return_offset) except TypeError: log.debug("Unsupported symbolic return offset in RETURNDATACOPY") return [global_state] try: concrete_size = helper.get_concrete_int(size) except TypeError: log.debug("Unsupported symbolic max_length offset in RETURNDATACOPY") return [global_state] if global_state.last_return_data is None: return [global_state] global_state.mstate.mem_extend(concrete_memory_offset, concrete_size) for i in range(concrete_size): global_state.mstate.memory[concrete_memory_offset + i] = ( global_state.last_return_data[concrete_return_offset + i] if concrete_return_offset + i < global_state.last_return_data.size else 0 ) return [global_state] @StateTransition() def returndatasize_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ if global_state.last_return_data: global_state.mstate.stack.append(global_state.last_return_data.size) else: global_state.mstate.stack.append(0) return [global_state] @StateTransition() def blockhash_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate blocknumber = state.stack.pop() state.stack.append( global_state.new_bitvec("blockhash_block_" + str(blocknumber), 256) ) return [global_state] @StateTransition() def coinbase_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.new_bitvec("coinbase", 256)) return [global_state] @StateTransition() def timestamp_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.new_bitvec("timestamp", 256)) return [global_state] @StateTransition() def number_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.environment.block_number) return [global_state] @StateTransition() def difficulty_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append( global_state.new_bitvec("block_difficulty", 256) ) return [global_state] @StateTransition() def gaslimit_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.mstate.gas_limit) return [global_state] # Memory operations @StateTransition() def mload_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate offset = state.stack.pop() state.mem_extend(offset, 32) data = state.memory.get_word_at(offset) state.stack.append(data) return [global_state] @StateTransition() def mstore_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate mstart, value = state.stack.pop(), state.stack.pop() try: state.mem_extend(mstart, 32) except Exception: log.debug("Error extending memory") state.memory.write_word_at(mstart, value) return [global_state] @StateTransition() def mstore8_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate offset, value = state.stack.pop(), state.stack.pop() state.mem_extend(offset, 1) try: value_to_write: Union[int, BitVec] = util.get_concrete_int(value) % 256 except TypeError: # BitVec value_to_write = Extract(7, 0, value) state.memory[offset] = value_to_write return [global_state] @StateTransition() def sload_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate index = state.stack.pop() state.stack.append(global_state.environment.active_account.storage[index]) return [global_state] @StateTransition(is_state_mutation_instruction=True) def sstore_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate index, value = state.stack.pop(), state.stack.pop() global_state.environment.active_account.storage[index] = value return [global_state] @StateTransition() def tload_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate address = global_state.environment.active_account.address index = state.stack.pop() value = global_state.world_state.transient_storage.get(address, index) state.stack.append(value) return [global_state] @StateTransition(is_state_mutation_instruction=True) def tstore_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate address = global_state.environment.active_account.address index, value = state.stack.pop(), state.stack.pop() global_state.world_state.transient_storage.set(address, index, value) return [global_state] @StateTransition(increment_pc=False, enable_gas=False) def jump_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate disassembly = global_state.environment.code try: jump_addr = util.get_concrete_int(state.stack.pop()) except TypeError: raise InvalidJumpDestination("Invalid jump argument (symbolic address)") except IndexError: raise StackUnderflowException() index = util.get_instruction_index(disassembly.instruction_list, jump_addr) if index is None: raise InvalidJumpDestination("JUMP to invalid address") op_code = disassembly.instruction_list[index]["opcode"] if op_code != "JUMPDEST": raise InvalidJumpDestination( "Skipping JUMP to invalid destination (not JUMPDEST): " + str(jump_addr) ) new_state = copy(global_state) # add JUMP gas cost min_gas, max_gas = get_opcode_gas("JUMP") new_state.mstate.min_gas_used += min_gas new_state.mstate.max_gas_used += max_gas # manually set PC to destination new_state.mstate.pc = index return [new_state] @StateTransition(increment_pc=False, enable_gas=False) def jumpi_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ state = global_state.mstate disassembly = global_state.environment.code min_gas, max_gas = get_opcode_gas("JUMPI") states = [] op0, condition = state.stack.pop(), state.stack.pop() try: jump_addr = util.get_concrete_int(op0) except TypeError: log.debug("Skipping JUMPI to invalid destination.") global_state.mstate.pc += 1 global_state.mstate.min_gas_used += min_gas global_state.mstate.max_gas_used += max_gas return [global_state] # False case negated = ( simplify(Not(condition)) if isinstance(condition, Bool) else condition == 0 ) negated.simplify() # True case condi = simplify(condition) if isinstance(condition, Bool) else condition != 0 condi.simplify() negated_cond = (isinstance(negated, bool) and negated) or ( isinstance(negated, Bool) and not is_false(negated) ) positive_cond = (isinstance(condi, bool) and condi) or ( isinstance(condi, Bool) and not is_false(condi) ) if negated_cond: # States have to be deep copied during a fork as summaries assume independence across states. new_state = deepcopy(global_state) # add JUMPI gas cost new_state.mstate.min_gas_used += min_gas new_state.mstate.max_gas_used += max_gas # manually increment PC new_state.mstate.depth += 1 new_state.mstate.pc += 1 new_state.world_state.constraints.append(negated) states.append(new_state) else: log.debug("Pruned unreachable states.") # Get jump destination index = util.get_instruction_index(disassembly.instruction_list, jump_addr) if index is None: log.debug("Invalid jump destination: " + str(jump_addr)) return states instr = disassembly.instruction_list[index] if instr["opcode"] == "JUMPDEST": if positive_cond: new_state = deepcopy(global_state) # add JUMPI gas cost new_state.mstate.min_gas_used += min_gas new_state.mstate.max_gas_used += max_gas # manually set PC to destination new_state.mstate.pc = index new_state.mstate.depth += 1 new_state.world_state.constraints.append(condi) states.append(new_state) else: log.debug("Pruned unreachable states.") return states @StateTransition() def pc_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ index = global_state.mstate.pc program_counter = global_state.environment.code.instruction_list[index][ "address" ] global_state.mstate.stack.append(symbol_factory.BitVecVal(program_counter, 256)) return [global_state] @StateTransition() def msize_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ global_state.mstate.stack.append(global_state.mstate.memory_size) return [global_state] @StateTransition() def gas_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ # TODO: Push a Constrained variable which lies between min gas and max gas global_state.mstate.stack.append(global_state.new_bitvec("gas", 256)) return [global_state] @StateTransition(is_state_mutation_instruction=True) def log_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ # TODO: implement me state = global_state.mstate depth = int(self.op_code[3:]) state.stack.pop(), state.stack.pop() _ = [state.stack.pop() for _ in range(depth)] # Not supported return [global_state] def _create_transaction_helper( self, global_state, call_value, mem_offset, mem_size, create2_salt=None ) -> List[GlobalState]: mstate = global_state.mstate environment = global_state.environment world_state = global_state.world_state call_data = get_call_data(global_state, mem_offset, mem_offset + mem_size) code_raw: List[int] = [] code_end = call_data.size size = call_data.size if isinstance(size, BitVec): # Other size restriction checks handle this if size.symbolic: size = 10**4 else: size = size.value code_raw = [] constraints = global_state.world_state.constraints try: model = get_model(constraints) except UnsatError: model = None if isinstance(call_data, ConcreteCalldata): for element in call_data.concrete(model): if isinstance(element, BitVec) and element.symbolic: break if isinstance(element, BitVec): code_raw.append(element.value) else: code_raw.append(element) if len(code_raw) < 1: global_state.mstate.stack.append(1) log.debug("No code found for trying to execute a create type instruction.") return [global_state] code_str = bytes.hex(bytes(code_raw)) next_transaction_id = tx_id_manager.get_next_tx_id() constructor_arguments = ConcreteCalldata( next_transaction_id, call_data[code_end:] ) code = Disassembly(code_str) caller = environment.active_account.address gas_price = environment.gasprice origin = environment.origin contract_address: Union[BitVec, int] = None Instruction._sha3_gas_helper(global_state, len(code_str[2:]) // 2) if create2_salt: if create2_salt.symbolic: if create2_salt.size() != 256: pad = symbol_factory.BitVecVal(0, 256 - create2_salt.size()) create2_salt = Concat(pad, create2_salt) address = keccak_function_manager.create_keccak( Concat( symbol_factory.BitVecVal(255, 8), caller, create2_salt, symbol_factory.BitVecVal(int(get_code_hash(code_str), 16), 256), ) ) contract_address = Extract(255, 96, address) else: salt = hex(create2_salt.value)[2:] salt = "0" * (64 - len(salt)) + salt addr = hex(caller.value)[2:] addr = "0" * (40 - len(addr)) + addr contract_address = int( get_code_hash("0xff" + addr + salt + get_code_hash(code_str)[2:])[ 26: ], 16, ) transaction = ContractCreationTransaction( world_state=world_state, caller=caller, code=code, call_data=constructor_arguments, gas_price=gas_price, gas_limit=mstate.gas_limit, origin=origin, call_value=call_value, contract_address=contract_address, ) log.info("Raise transaction start signal") raise TransactionStartSignal(transaction, self.op_code, global_state) @StateTransition(is_state_mutation_instruction=True) def create_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ call_value, mem_offset, mem_size = global_state.mstate.pop(3) return self._create_transaction_helper( global_state, call_value, mem_offset, mem_size ) @StateTransition() def create_post(self, global_state: GlobalState) -> List[GlobalState]: return self._handle_create_type_post(global_state) @StateTransition(is_state_mutation_instruction=True) def create2_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ call_value, mem_offset, mem_size, salt = global_state.mstate.pop(4) return self._create_transaction_helper( global_state, call_value, mem_offset, mem_size, salt ) @StateTransition() def create2_post(self, global_state: GlobalState) -> List[GlobalState]: return self._handle_create_type_post(global_state, opcode="create2") @staticmethod def _handle_create_type_post(global_state, opcode="create"): if opcode == "create2": global_state.mstate.pop(4) else: global_state.mstate.pop(3) if global_state.last_return_data: return_val = symbol_factory.BitVecVal( int(global_state.last_return_data.return_data, 16), 256 ) else: return_val = symbol_factory.BitVecVal(0, 256) global_state.mstate.stack.append(return_val) return [global_state] @StateTransition() def return_(self, global_state: GlobalState): """ :param global_state: """ state = global_state.mstate offset, length = state.stack.pop(), state.stack.pop() if length.symbolic: return_data = [global_state.new_bitvec("return_data", 8)] log.debug("Return with symbolic length or offset. Not supported") else: state.mem_extend(offset, length) StateTransition.check_gas_usage_limit(global_state) return_data = state.memory[offset : offset + length] global_state.current_transaction.end( global_state, ReturnData(return_data, length) ) @StateTransition(is_state_mutation_instruction=True) def selfdestruct_(self, global_state: GlobalState): """ :param global_state: """ target = global_state.mstate.stack.pop() transfer_amount = global_state.environment.active_account.balance() # Often the target of the selfdestruct instruction will be symbolic # If it isn't then we'll transfer the balance to the indicated contract global_state.world_state.balances[target] += transfer_amount global_state.environment.active_account = deepcopy( global_state.environment.active_account ) global_state.accounts[global_state.environment.active_account.address.value] = ( global_state.environment.active_account ) global_state.environment.active_account.set_balance(0) global_state.environment.active_account.deleted = True global_state.current_transaction.end(global_state) @StateTransition() def revert_(self, global_state: GlobalState) -> None: """ :param global_state: """ state = global_state.mstate offset, length = state.stack.pop(), state.stack.pop() if length.symbolic is False: return_data = [ global_state.new_bitvec( f"{global_state.current_transaction.id}_return_data_{i}", 8 ) for i in range(length.value) ] else: return_data = [ If( i < length, global_state.new_bitvec( f"{global_state.current_transaction.id}_return_data_{i}", 8 ), 0, ) for i in range(300) ] try: return_data = state.memory[ util.get_concrete_int(offset) : util.get_concrete_int(offset + length) ] except TypeError: log.debug("Return with symbolic length or offset. Not supported") global_state.current_transaction.end( global_state, return_data=ReturnData(return_data, length), revert=True ) @StateTransition() def assert_fail_(self, global_state: GlobalState): """ :param global_state: """ # 0xfe: designated invalid opcode raise InvalidInstruction @StateTransition() def invalid_(self, global_state: GlobalState): """ :param global_state: """ raise InvalidInstruction @StateTransition() def stop_(self, global_state: GlobalState): """ :param global_state: """ global_state.current_transaction.end(global_state) @staticmethod def _write_symbolic_returndata( global_state: GlobalState, memory_out_offset: BitVec, memory_out_size: BitVec ): """ Writes symbolic return-data into memory, The memory offset and size should be concrete :param global_state: :param memory_out_offset: :param memory_out_size: :return: """ if memory_out_offset.symbolic is True or memory_out_size.symbolic is True: return return_data = [] return_data_size = global_state.new_bitvec("returndatasize", 256) for i in range(memory_out_size.value): data = global_state.new_bitvec( "call_output_var({})_{}".format( simplify(memory_out_offset + i), global_state.mstate.pc ), 8, ) return_data.append(data) global_state.mstate.mem_extend(memory_out_offset, memory_out_size) for i in range(memory_out_size.value): global_state.mstate.memory[memory_out_offset + i] = If( i <= return_data_size, return_data[i], global_state.mstate.memory[memory_out_offset + i], ) global_state.last_return_data = ReturnData( return_data=return_data, return_data_size=return_data_size ) @StateTransition() def call_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ instr = global_state.get_current_instruction() environment = global_state.environment memory_out_size, memory_out_offset = global_state.mstate.stack[-7:-5] try: ( callee_address, callee_account, call_data, value, gas, memory_out_offset, memory_out_size, ) = get_call_parameters(global_state, self.dynamic_loader, True) if callee_account is not None and callee_account.code.bytecode == "": log.debug("The call is related to ether transfer between accounts") sender = environment.active_account.address receiver = callee_account.address transfer_ether(global_state, sender, receiver, value) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] except ValueError as e: log.debug( "Could not determine required parameters for call, putting fresh symbol on the stack. \n{}".format( e ) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) # TODO: decide what to do in this case global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] if environment.static: if isinstance(value, int) and value > 0: raise WriteProtection( "Cannot call with non zero value in a static call" ) if isinstance(value, BitVec): if value.symbolic: global_state.world_state.constraints.append( value == symbol_factory.BitVecVal(0, 256) ) elif value.value > 0: raise WriteProtection( "Cannot call with non zero value in a static call" ) native_result = native_call( global_state, callee_address, call_data, memory_out_offset, memory_out_size ) if native_result: return native_result transaction = MessageCallTransaction( world_state=global_state.world_state, gas_price=environment.gasprice, gas_limit=gas, origin=environment.origin, caller=environment.active_account.address, callee_account=callee_account, call_data=call_data, call_value=value, static=environment.static, ) raise TransactionStartSignal(transaction, self.op_code, global_state) @StateTransition() def call_post(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ return self.post_handler(global_state, function_name="call") @StateTransition() def callcode_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ instr = global_state.get_current_instruction() environment = global_state.environment memory_out_size, memory_out_offset = global_state.mstate.stack[-7:-5] try: ( callee_address, callee_account, call_data, value, gas, _, _, ) = get_call_parameters(global_state, self.dynamic_loader, True) if callee_account is not None and callee_account.code.bytecode == "": log.debug("The call is related to ether transfer between accounts") sender = global_state.environment.active_account.address receiver = callee_account.address transfer_ether(global_state, sender, receiver, value) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] except ValueError as e: log.debug( "Could not determine required parameters for call, putting fresh symbol on the stack. \n{}".format( e ) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] native_result = native_call( global_state, callee_address, call_data, memory_out_offset, memory_out_size ) if native_result: return native_result transaction = MessageCallTransaction( world_state=global_state.world_state, gas_price=environment.gasprice, gas_limit=gas, origin=environment.origin, code=callee_account.code, caller=environment.address, callee_account=environment.active_account, call_data=call_data, call_value=value, static=environment.static, ) raise TransactionStartSignal(transaction, self.op_code, global_state) @StateTransition() def callcode_post(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ instr = global_state.get_current_instruction() memory_out_size, memory_out_offset = global_state.mstate.stack[-7:-5] try: ( _, _, _, _, _, memory_out_offset, memory_out_size, ) = get_call_parameters(global_state, self.dynamic_loader, True) except ValueError as e: log.debug( "Could not determine required parameters for call, putting fresh symbol on the stack. \n{}".format( e ) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] if global_state.last_return_data is None: # Put return value on stack return_value = global_state.new_bitvec( "retval_" + str(instr["address"]), 256 ) global_state.mstate.stack.append(return_value) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.world_state.constraints.append(return_value == 0) return [global_state] try: memory_out_offset = ( util.get_concrete_int(memory_out_offset) if isinstance(memory_out_offset, Expression) else memory_out_offset ) memory_out_size = ( util.get_concrete_int(memory_out_size) if isinstance(memory_out_size, Expression) else memory_out_size ) except TypeError: global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] # Copy memory global_state.mstate.mem_extend( memory_out_offset, min(memory_out_size, global_state.last_return_data.size) ) if global_state.last_return_data.size.symbolic: ret_size = 500 else: ret_size = global_state.last_return_data.size.value for i in range(min(memory_out_size, ret_size)): global_state.mstate.memory[i + memory_out_offset] = ( global_state.last_return_data[i] ) # Put return value on stack return_value = global_state.new_bitvec("retval_" + str(instr["address"]), 256) global_state.mstate.stack.append(return_value) global_state.world_state.constraints.append(return_value == 1) return [global_state] @StateTransition() def delegatecall_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ instr = global_state.get_current_instruction() environment = global_state.environment memory_out_size, memory_out_offset = global_state.mstate.stack[-6:-4] try: ( callee_address, callee_account, call_data, value, gas, _, _, ) = get_call_parameters(global_state, self.dynamic_loader) if callee_account is not None and callee_account.code.bytecode == "": log.debug("The call is related to ether transfer between accounts") sender = global_state.environment.active_account.address receiver = callee_account.address transfer_ether(global_state, sender, receiver, value) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] except ValueError as e: log.debug( "Could not determine required parameters for call, putting fresh symbol on the stack. \n{}".format( e ) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] native_result = native_call( global_state, callee_address, call_data, memory_out_offset, memory_out_size ) if native_result: return native_result transaction = MessageCallTransaction( world_state=global_state.world_state, gas_price=environment.gasprice, gas_limit=gas, origin=environment.origin, code=callee_account.code, caller=environment.sender, callee_account=environment.active_account, call_data=call_data, call_value=environment.callvalue, static=environment.static, ) raise TransactionStartSignal(transaction, self.op_code, global_state) @StateTransition() def delegatecall_post(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ instr = global_state.get_current_instruction() memory_out_size, memory_out_offset = global_state.mstate.stack[-6:-4] try: ( _, _, _, _, _, memory_out_offset, memory_out_size, ) = get_call_parameters(global_state, self.dynamic_loader) except ValueError as e: log.debug( "Could not determine required parameters for call, putting fresh symbol on the stack. \n{}".format( e ) ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) return [global_state] if global_state.last_return_data is None: # Put return value on stack return_value = global_state.new_bitvec( "retval_" + str(instr["address"]), 256 ) global_state.mstate.stack.append(return_value) global_state.world_state.constraints.append(return_value == 0) return [global_state] try: memory_out_offset = ( util.get_concrete_int(memory_out_offset) if isinstance(memory_out_offset, Expression) else memory_out_offset ) memory_out_size = ( util.get_concrete_int(memory_out_size) if isinstance(memory_out_size, Expression) else memory_out_size ) except TypeError: global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] # Copy memory global_state.mstate.mem_extend( memory_out_offset, min(memory_out_size, global_state.last_return_data.size) ) if global_state.last_return_data.size.symbolic: ret_size = 500 else: ret_size = global_state.last_return_data.size.value for i in range(min(memory_out_size, ret_size)): global_state.mstate.memory[i + memory_out_offset] = ( global_state.last_return_data[i] ) # Put return value on stack return_value = global_state.new_bitvec("retval_" + str(instr["address"]), 256) global_state.mstate.stack.append(return_value) global_state.world_state.constraints.append(return_value == 1) return [global_state] @StateTransition() def staticcall_(self, global_state: GlobalState) -> List[GlobalState]: """ :param global_state: :return: """ instr = global_state.get_current_instruction() environment = global_state.environment memory_out_size, memory_out_offset = global_state.mstate.stack[-6:-4] try: ( callee_address, callee_account, call_data, value, gas, memory_out_offset, memory_out_size, ) = get_call_parameters(global_state, self.dynamic_loader) if callee_account is not None and callee_account.code.bytecode == "": log.debug("The call is related to ether transfer between accounts") sender = environment.active_account.address receiver = callee_account.address transfer_ether(global_state, sender, receiver, value) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] except ValueError as e: log.debug( "Could not determine required parameters for call, putting fresh symbol on the stack. \n{}".format( e ) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] native_result = native_call( global_state, callee_address, call_data, memory_out_offset, memory_out_size ) if native_result: return native_result transaction = MessageCallTransaction( world_state=global_state.world_state, gas_price=environment.gasprice, gas_limit=gas, origin=environment.origin, code=callee_account.code, caller=environment.address, callee_account=callee_account, call_data=call_data, call_value=value, static=True, ) raise TransactionStartSignal(transaction, self.op_code, global_state) @StateTransition() def staticcall_post(self, global_state: GlobalState) -> List[GlobalState]: return self.post_handler(global_state, function_name="staticcall") def post_handler(self, global_state, function_name: str): instr = global_state.get_current_instruction() if function_name in ("staticcall", "delegatecall"): memory_out_size, memory_out_offset = global_state.mstate.stack[-6:-4] else: memory_out_size, memory_out_offset = global_state.mstate.stack[-7:-5] try: with_value = function_name != "staticcall" ( _, _, _, _, _, memory_out_offset, memory_out_size, ) = get_call_parameters(global_state, self.dynamic_loader, with_value) except ValueError as e: log.debug( "Could not determine required parameters for {}, putting fresh symbol on the stack. \n{}".format( function_name, e ) ) self._write_symbolic_returndata( global_state, memory_out_offset, memory_out_size ) global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] if global_state.last_return_data is None: # Put return value on stack return_value = global_state.new_bitvec( "retval_" + str(instr["address"]), 256 ) global_state.mstate.stack.append(return_value) return [global_state] try: memory_out_offset = ( util.get_concrete_int(memory_out_offset) if isinstance(memory_out_offset, Expression) else memory_out_offset ) memory_out_size = ( util.get_concrete_int(memory_out_size) if isinstance(memory_out_size, Expression) else memory_out_size ) except TypeError: global_state.mstate.stack.append( global_state.new_bitvec("retval_" + str(instr["address"]), 256) ) return [global_state] global_state.mstate.mem_extend( memory_out_offset, min(memory_out_size, global_state.last_return_data.size) ) if global_state.last_return_data.size.symbolic: ret_size = 500 else: ret_size = global_state.last_return_data.size.value for i in range(min(memory_out_size, ret_size)): global_state.mstate.memory[i + memory_out_offset] = ( global_state.last_return_data[i] ) # Put return value on stack return_value = global_state.new_bitvec( "retval_" + str(global_state.get_current_instruction()["address"]), 256 ) global_state.mstate.stack.append(return_value) global_state.world_state.constraints.append(return_value == 1) return [global_state] ================================================ FILE: mythril/laser/ethereum/natives.py ================================================ """This nodule defines helper functions to deal with native calls.""" import hashlib import logging from typing import List import blake2b import coincurve import py_ecc.optimized_bn128 as bn128 from eth._utils.blake2.coders import extract_blake2b_parameters from eth._utils.bn128 import validate_point from eth_utils import ValidationError, big_endian_to_int, int_to_big_endian from py_ecc.secp256k1 import N as secp256k1n from py_ecc.secp256k1 import ecdsa_raw_recover from rlp.utils import ALL_BYTES from mythril.laser.ethereum.state.calldata import BaseCalldata, ConcreteCalldata from mythril.laser.ethereum.util import extract32, extract_copy from mythril.support.support_utils import sha3, zpad log = logging.getLogger(__name__) def encode_int32(v): return v.to_bytes(32, byteorder="big") def safe_ord(value): if isinstance(value, int): return value else: return ord(value) def int_to_32bytearray(i): o = [0] * 32 for x in range(32): o[31 - x] = i & 0xFF i >>= 8 return o def ecrecover_to_pub(rawhash, v, r, s): if hasattr(coincurve, "PublicKey"): try: pk = coincurve.PublicKey.from_signature_and_message( zpad(bytes(int_to_32bytearray(r)), 32) + zpad(bytes(int_to_32bytearray(s)), 32) + ALL_BYTES[v - 27], rawhash, hasher=None, ) pub = pk.format(compressed=False)[1:] except BaseException: pub = b"\x00" * 64 else: result = ecdsa_raw_recover(rawhash, (v, r, s)) if result: x, y = result pub = encode_int32(x) + encode_int32(y) else: raise ValueError("Invalid VRS") assert len(pub) == 64 return pub class NativeContractException(Exception): """An exception denoting an error during a native call.""" pass def ecrecover(data: List[int]) -> List[int]: """ :param data: :return: """ # TODO: Add type hints try: bytes_data = bytearray(data) v = extract32(bytes_data, 32) r = extract32(bytes_data, 64) s = extract32(bytes_data, 96) except TypeError: raise NativeContractException message = b"".join([ALL_BYTES[x] for x in bytes_data[0:32]]) if r >= secp256k1n or s >= secp256k1n or v < 27 or v > 28: return [] try: pub = ecrecover_to_pub(message, v, r, s) except Exception as e: log.debug("An error has occurred while extracting public key: " + str(e)) return [] o = [0] * 12 + [x for x in sha3(pub)[-20:]] return list(bytearray(o)) def sha256(data: List[int]) -> List[int]: """ :param data: :return: """ try: bytes_data = bytes(data) except TypeError: raise NativeContractException return list(bytearray(hashlib.sha256(bytes_data).digest())) def ripemd160(data: List[int]) -> List[int]: """ :param data: :return: """ try: bytes_data = bytes(data) except TypeError: raise NativeContractException digest = hashlib.new("ripemd160", bytes_data).digest() padded = 12 * [0] + list(digest) return list(bytearray(bytes(padded))) def identity(data: List[int]) -> List[int]: """ :param data: :return: """ return data def mod_exp(data: List[int]) -> List[int]: """ TODO: Some symbolic parts can be handled here Modular Exponentiation :param data: Data with :return: modular exponentiation """ bytes_data = bytearray(data) baselen = extract32(bytes_data, 0) explen = extract32(bytes_data, 32) modlen = extract32(bytes_data, 64) if baselen == 0: return [0] * modlen if modlen == 0: return [] first_exp_bytes = extract32(bytes_data, 96 + baselen) >> (8 * max(32 - explen, 0)) while first_exp_bytes: first_exp_bytes >>= 1 base = bytearray(baselen) extract_copy(bytes_data, base, 0, 96, baselen) exp = bytearray(explen) extract_copy(bytes_data, exp, 0, 96 + baselen, explen) mod = bytearray(modlen) extract_copy(bytes_data, mod, 0, 96 + baselen + explen, modlen) if big_endian_to_int(mod) == 0: return [0] * modlen o = pow(big_endian_to_int(base), big_endian_to_int(exp), big_endian_to_int(mod)) return [safe_ord(x) for x in zpad(int_to_big_endian(o), modlen)] def ec_add(data: List[int]) -> List[int]: bytes_data = bytearray(data) x1 = extract32(bytes_data, 0) y1 = extract32(bytes_data, 32) x2 = extract32(bytes_data, 64) y2 = extract32(bytes_data, 96) try: p1 = validate_point(x1, y1) p2 = validate_point(x2, y2) except ValidationError: return [] if p1 is False or p2 is False: return [] o = bn128.normalize(bn128.add(p1, p2)) return [safe_ord(x) for x in (encode_int32(o[0].n) + encode_int32(o[1].n))] def ec_mul(data: List[int]) -> List[int]: bytes_data = bytearray(data) x = extract32(bytes_data, 0) y = extract32(bytes_data, 32) m = extract32(bytes_data, 64) try: p = validate_point(x, y) except ValidationError: return [] if p is False: return [] o = bn128.normalize(bn128.multiply(p, m)) return [safe_ord(c) for c in (encode_int32(o[0].n) + encode_int32(o[1].n))] def ec_pair(data: List[int]) -> List[int]: if len(data) % 192: return [] zero = (bn128.FQ2.one(), bn128.FQ2.one(), bn128.FQ2.zero()) exponent = bn128.FQ12.one() bytes_data = bytearray(data) for i in range(0, len(bytes_data), 192): x1 = extract32(bytes_data, i) y1 = extract32(bytes_data, i + 32) x2_i = extract32(bytes_data, i + 64) x2_r = extract32(bytes_data, i + 96) y2_i = extract32(bytes_data, i + 128) y2_r = extract32(bytes_data, i + 160) p1 = validate_point(x1, y1) if p1 is False: return [] for v in (x2_i, x2_r, y2_i, y2_r): if v >= bn128.field_modulus: return [] fq2_x = bn128.FQ2([x2_r, x2_i]) fq2_y = bn128.FQ2([y2_r, y2_i]) if (fq2_x, fq2_y) != (bn128.FQ2.zero(), bn128.FQ2.zero()): p2 = (fq2_x, fq2_y, bn128.FQ2.one()) if not bn128.is_on_curve(p2, bn128.b2): return [] else: p2 = zero if bn128.multiply(p2, bn128.curve_order)[-1] != bn128.FQ2.zero(): return [] exponent *= bn128.pairing(p2, p1, final_exponentiate=False) result = bn128.final_exponentiate(exponent) == bn128.FQ12.one() return [0] * 31 + [1 if result else 0] def blake2b_fcompress(data: List[int]) -> List[int]: """ blake2b hashing :param data: :return: """ try: parameters = extract_blake2b_parameters(bytes(data)) except ValidationError as v: logging.debug("Invalid blake2b params: {}".format(v)) return [] return list(bytearray(blake2b.compress(*parameters))) PRECOMPILE_FUNCTIONS = ( ecrecover, sha256, ripemd160, identity, mod_exp, ec_add, ec_mul, ec_pair, blake2b_fcompress, ) PRECOMPILE_COUNT = len(PRECOMPILE_FUNCTIONS) def native_contracts(address: int, data: BaseCalldata) -> List[int]: """Takes integer address 1, 2, 3, 4. :param address: :param data: :return: """ if not isinstance(data, ConcreteCalldata): raise NativeContractException concrete_data = data.concrete(None) try: return PRECOMPILE_FUNCTIONS[address - 1](concrete_data) except TypeError: raise NativeContractException ================================================ FILE: mythril/laser/ethereum/state/__init__.py ================================================ # Hello! ================================================ FILE: mythril/laser/ethereum/state/account.py ================================================ """This module contains account-related functionality. This includes classes representing accounts and their storage. """ import logging from copy import copy, deepcopy from typing import Any, Dict, Set, Union from mythril.disassembler.disassembly import Disassembly from mythril.laser.smt import Array, BaseArray, BitVec, If, K, simplify, symbol_factory from mythril.laser.smt import SMTBool as Bool from mythril.support.support_args import args log = logging.getLogger(__name__) class Storage: """Storage class represents the storage of an Account.""" def __init__(self, concrete=False, address=None, dynamic_loader=None) -> None: """Constructor for Storage. :param concrete: bool indicating whether to interpret uninitialized storage as concrete versus symbolic """ if concrete and args.unconstrained_storage is False: self._standard_storage: BaseArray = K(256, 256, 0) else: self._standard_storage = Array(f"Storage{address}", 256, 256) self.printable_storage: Dict[BitVec, BitVec] = {} self.dynld = dynamic_loader self.storage_keys_loaded: Set[int] = set() self.address = address # Stores all keys set in the storage self.keys_set: Set[BitVec] = set() # Stores all get keys in the storage self.keys_get: Set[BitVec] = set() def __getitem__(self, item: BitVec) -> BitVec: storage = self._standard_storage self.keys_get.add(item) if ( self.address and self.address.value != 0 and item.symbolic is False and int(item.value) not in self.storage_keys_loaded and (self.dynld and self.dynld.active) and args.unconstrained_storage is False ): try: value = symbol_factory.BitVecVal( int( self.dynld.read_storage( contract_address="0x{:040X}".format(self.address.value), index=int(item.value), ), 16, ), 256, ) for key in self.keys_set: value = If(key == item, storage[item], value) storage[item] = value self.storage_keys_loaded.add(int(item.value)) self.printable_storage[item] = storage[item] except ValueError as e: log.debug("Couldn't read storage at %s: %s", item, e) return simplify(storage[item]) def __setitem__(self, key, value: Any) -> None: if isinstance(value, Bool): value = If(value, 1, 0) self.printable_storage[key] = value self._standard_storage[key] = value self.keys_set.add(key) if key.symbolic is False: self.storage_keys_loaded.add(int(key.value)) def __deepcopy__(self, memodict=dict()): concrete = isinstance(self._standard_storage, K) storage = Storage( concrete=concrete, address=self.address, dynamic_loader=self.dynld ) storage._standard_storage = deepcopy(self._standard_storage) storage.printable_storage = copy(self.printable_storage) storage.storage_keys_loaded = copy(self.storage_keys_loaded) storage.keys_set = deepcopy(self.keys_set) storage.keys_get = deepcopy(self.keys_get) return storage def __str__(self) -> str: # TODO: Do something better here return str(self.printable_storage) class Account: """Account class representing ethereum accounts.""" def __init__( self, address: Union[BitVec, str], code=None, contract_name=None, balances: Array = None, concrete_storage=False, dynamic_loader=None, nonce=0, ) -> None: """Constructor for account. :param address: Address of the account :param code: The contract code of the account :param contract_name: The name associated with the account :param balances: The balance for the account :param concrete_storage: Interpret storage as concrete """ self.concrete_storage = concrete_storage self.nonce = nonce self.code = code or Disassembly("") self.address = ( address if isinstance(address, BitVec) else symbol_factory.BitVecVal(int(address, 16), 256) ) self.storage = Storage( concrete_storage, address=self.address, dynamic_loader=dynamic_loader ) # Metadata if contract_name is None: self.contract_name = ( "{0:#0{1}x}".format(self.address.value, 42) if not self.address.symbolic else "unknown" ) else: self.contract_name = contract_name self.deleted = False self._balances = balances self.balance = lambda: self._balances[self.address] def __str__(self) -> str: return str(self.as_dict) def set_balance(self, balance: Union[int, BitVec]) -> None: """ :param balance: """ balance = ( symbol_factory.BitVecVal(balance, 256) if isinstance(balance, int) else balance ) assert self._balances is not None self._balances[self.address] = balance def set_storage(self, storage: Dict): """ Sets concrete storage """ for key, value in storage.items(): concrete_key, concrete_value = int(key, 16), int(value, 16) self.storage[symbol_factory.BitVecVal(concrete_key, 256)] = ( symbol_factory.BitVecVal(concrete_value, 256) ) def add_balance(self, balance: Union[int, BitVec]) -> None: """ :param balance: """ balance = ( symbol_factory.BitVecVal(balance, 256) if isinstance(balance, int) else balance ) self._balances[self.address] += balance @property def as_dict(self) -> Dict: """ :return: """ return { "nonce": self.nonce, "code": self.serialised_code(), "balance": self.balance(), "storage": self.storage, } def serialised_code(self): if isinstance(self.code.bytecode, str): return self.code.bytecode new_code = "0x" for byte in self.code.bytecode: if isinstance(byte, int): new_code += hex(byte) else: new_code += "" return new_code def __copy__(self, memodict={}): new_account = Account( address=self.address, code=self.code, contract_name=self.contract_name, balances=deepcopy(self._balances), concrete_storage=self.concrete_storage, nonce=self.nonce, ) new_account.storage = deepcopy(self.storage) new_account.code = self.code return new_account ================================================ FILE: mythril/laser/ethereum/state/annotation.py ================================================ """This module includes classes used for annotating trace information. This includes the base StateAnnotation class, as well as an adaption, which will not be copied on every new state. """ from abc import abstractmethod class StateAnnotation: """The StateAnnotation class is used to persist information over traces. This allows modules to reason about traces without the need to traverse the state space themselves. """ # TODO: Remove this? It seems to be used only in the MutationPruner, and # we could simply use world state annotations if we want them to be persisted. @property def persist_to_world_state(self) -> bool: """If this function returns true then laser will also annotate the world state. If you want annotations to persist through different user initiated message call transactions then this should be enabled. The default is set to False """ return False @property def persist_over_calls(self) -> bool: """If this function returns true then laser will propagate the annotation between calls The default is set to False """ return False @property def search_importance(self) -> int: """ Used in estimating the priority of a state annotated with the corresponding annotation. Default is 1 """ return 1 class MergeableStateAnnotation(StateAnnotation): """This class allows a base annotation class for annotations that can be merged. """ @abstractmethod def check_merge_annotation(self, annotation) -> bool: pass @abstractmethod def merge_annotation(self, annotation): pass class NoCopyAnnotation(StateAnnotation): """This class provides a base annotation class for annotations that shouldn't be copied on every new state. Rather the same object should be propagated. This is very useful if you are looking to analyze a property over multiple substates """ def __copy__(self): return self def __deepcopy__(self, _): return self ================================================ FILE: mythril/laser/ethereum/state/calldata.py ================================================ """This module declares classes to represent call data.""" from typing import Any, List, Tuple, Union, cast from z3 import Model, unknown, unsat from z3.z3types import Z3Exception from mythril.laser.ethereum.util import get_concrete_int from mythril.laser.smt import ( Array, BitVec, Concat, Expression, If, K, Solver, simplify, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) class BaseCalldata: """Base calldata class This represents the calldata provided when sending a transaction to a contract.""" def __init__(self, tx_id: str) -> None: """ :param tx_id: """ self.tx_id = tx_id @property def calldatasize(self) -> BitVec: """ :return: Calldata size for this calldata object """ result = self.size if isinstance(result, int): return symbol_factory.BitVecVal(result, 256) return result def get_word_at(self, offset: int) -> Expression: """Gets word at offset. :param offset: :return: """ parts = self[offset : offset + 32] return simplify(Concat(parts)) def __getitem__(self, item: Union[int, slice, BitVec]) -> Any: """ :param item: :return: """ if isinstance(item, int) or isinstance(item, Expression): return self._load(item) if isinstance(item, slice): start = 0 if item.start is None else item.start step = 1 if item.step is None else item.step stop = self.size if item.stop is None else item.stop try: current_index = ( start if isinstance(start, BitVec) else symbol_factory.BitVecVal(start, 256) ) parts = [] while True: s = Solver() s.set_timeout(1000) s.add(current_index != stop) result = s.check() if result in (unsat, unknown): break element = self._load(current_index) if not isinstance(element, Expression): element = symbol_factory.BitVecVal(element, 8) parts.append(element) current_index = simplify(current_index + step) except Z3Exception: raise IndexError("Invalid Calldata Slice") return parts raise ValueError def _load(self, item: Union[int, BitVec]) -> Any: """ :param item: """ raise NotImplementedError() @property def size(self) -> Union[BitVec, int]: """Returns the exact size of this calldata, this is not normalized. :return: unnormalized call data size """ raise NotImplementedError() def concrete(self, model: Model) -> list: """Returns a concrete version of the calldata using the provided model. :param model: """ raise NotImplementedError class ConcreteCalldata(BaseCalldata): """A concrete call data representation.""" def __init__(self, tx_id: str, calldata: list) -> None: """Initializes the ConcreteCalldata object. :param tx_id: Id of the transaction that the calldata is for. :param calldata: The concrete calldata content """ self._concrete_calldata = calldata self._calldata = K(256, 8, 0) for i, element in enumerate(calldata, 0): element = ( symbol_factory.BitVecVal(element, 8) if isinstance(element, int) else element ) self._calldata[symbol_factory.BitVecVal(i, 256)] = element super().__init__(tx_id) def _load(self, item: Union[int, BitVec]) -> BitVec: """ :param item: :return: """ item = symbol_factory.BitVecVal(item, 256) if isinstance(item, int) else item return simplify(self._calldata[item]) def concrete(self, model: Model) -> list: """ :param model: :return: """ return self._concrete_calldata @property def size(self) -> int: """ :return: """ return len(self._concrete_calldata) class BasicConcreteCalldata(BaseCalldata): """A base class to represent concrete call data.""" def __init__(self, tx_id: str, calldata: list) -> None: """Initializes the ConcreteCalldata object, that doesn't use z3 arrays. :param tx_id: Id of the transaction that the calldata is for. :param calldata: The concrete calldata content """ self._calldata = calldata super().__init__(tx_id) def _load(self, item: Union[int, Expression]) -> Any: """ :param item: :return: """ if isinstance(item, int): try: return self._calldata[item] except IndexError: return 0 value = symbol_factory.BitVecVal(0x0, 8) for i in range(self.size): value = If(cast(Union[BitVec, Bool], item) == i, self._calldata[i], value) return value def concrete(self, model: Model) -> list: """ :param model: :return: """ concrete_calldata = [] for data in self._calldata: if isinstance(data, BitVec) and data.symbolic and model is not None: concrete_calldata.append(model.eval(data, model_completion=True)) elif isinstance(data, BitVec) and data.symbolic is False: concrete_calldata.append(data) else: break return concrete_calldata @property def size(self) -> int: """ :return: """ return len(self._calldata) class SymbolicCalldata(BaseCalldata): """A class for representing symbolic call data.""" def __init__(self, tx_id: str) -> None: """Initializes the SymbolicCalldata object. :param tx_id: Id of the transaction that the calldata is for. """ self._size = symbol_factory.BitVecSym(str(tx_id) + "_calldatasize", 256) self._calldata = Array("{}_calldata".format(tx_id), 256, 8) super().__init__(tx_id) def _load(self, item: Union[int, BitVec]) -> Any: """ :param item: :return: """ item = symbol_factory.BitVecVal(item, 256) if isinstance(item, int) else item return simplify( If( item < self._size, simplify(self._calldata[cast(BitVec, item)]), symbol_factory.BitVecVal(0, 8), ) ) def concrete(self, model: Model) -> list: """ :param model: :return: """ concrete_length = model.eval(self.size.raw, model_completion=True).as_long() result = [] for i in range(concrete_length): value = self._load(i) c_value = model.eval(value.raw, model_completion=True).as_long() result.append(c_value) return result @property def size(self) -> BitVec: """ :return: """ return self._size class BasicSymbolicCalldata(BaseCalldata): """A basic class representing symbolic call data.""" def __init__(self, tx_id: str) -> None: """Initializes the SymbolicCalldata object. :param tx_id: Id of the transaction that the calldata is for. """ self._reads: List[Tuple[Union[int, BitVec], BitVec]] = [] self._size = symbol_factory.BitVecSym(str(tx_id) + "_calldatasize", 256) super().__init__(tx_id) def _load(self, item: Union[int, BitVec], clean=False) -> Any: expr_item: BitVec = ( symbol_factory.BitVecVal(item, 256) if isinstance(item, int) else item ) symbolic_base_value = If( expr_item >= self._size, symbol_factory.BitVecVal(0, 8), BitVec( symbol_factory.BitVecSym( "{}_calldata_{}".format(self.tx_id, str(item)), 8 ) ), ) return_value = symbolic_base_value for r_index, r_value in self._reads: return_value = If(r_index == expr_item, r_value, return_value) if not clean: self._reads.append((expr_item, symbolic_base_value)) return simplify(return_value) def concrete(self, model: Model) -> list: """ :param model: :return: """ concrete_length = get_concrete_int(model.eval(self.size, model_completion=True)) result = [] for i in range(concrete_length): value = self._load(i, clean=True) c_value = get_concrete_int(model.eval(value, model_completion=True)) result.append(c_value) return result @property def size(self) -> BitVec: """ :return: """ return self._size ================================================ FILE: mythril/laser/ethereum/state/constraints.py ================================================ """This module contains the class used to represent state-change constraints in the call graph.""" from copy import copy from typing import Iterable, List, Optional, Union from mythril.exceptions import SolverTimeOutException, UnsatError from mythril.laser.ethereum.function_managers import keccak_function_manager from mythril.laser.smt import SMTBool as Bool from mythril.laser.smt import simplify, symbol_factory from mythril.laser.smt.model import Model from mythril.support.model import get_model class Constraints(list): """This class should maintain a solver and it's constraints, This class tries to make the Constraints() object as a simple list of constraints with some background processing. """ def __init__(self, constraint_list: Optional[List[Bool]] = None) -> None: """ :param constraint_list: List of constraints """ constraint_list = constraint_list or [] constraint_list = self._get_smt_bool_list(constraint_list) super(Constraints, self).__init__(constraint_list) def is_possible(self, solver_timeout=None) -> bool: """ :param solver_timeout: The default timeout uses analysis timeout from args.solver_timeout :return: True/False based on the existence of solution of constraints """ try: get_model(self, solver_timeout=solver_timeout) except SolverTimeOutException: # If it uses the long analysis solver timeout if solver_timeout is None: return False # If it uses a short custom solver timeout return True except UnsatError: return False return True def get_model(self, solver_timeout=None) -> Optional[Model]: """ :param solver_timeout: The default timeout uses analysis timeout from args.solver_timeout :return: True/False based on the existence of solution of constraints """ try: return get_model(self, solver_timeout=solver_timeout) except SolverTimeOutException: return None except UnsatError: return None def append(self, constraint: Union[bool, Bool]) -> None: """ :param constraint: The constraint to be appended """ constraint = ( simplify(constraint) if isinstance(constraint, Bool) else symbol_factory.Bool(constraint) ) super(Constraints, self).append(constraint) @property def as_list(self) -> List[Bool]: """ :return: returns the list of constraints """ return self[:] + [keccak_function_manager.create_conditions()] def __copy__(self) -> "Constraints": """ :return: The copied constraint List """ constraint_list = super(Constraints, self).copy() return Constraints(constraint_list) def copy(self) -> "Constraints": return self.__copy__() def __deepcopy__(self, memodict=None) -> "Constraints": """ :param memodict: :return: The copied constraint List """ new_constraints = Constraints() for constraint in self: new_constraints.append(copy(constraint)) return new_constraints def __add__(self, constraints: List[Union[bool, Bool]]) -> "Constraints": """ :param constraints: :return: the new list after the + operation """ constraints_list = self._get_smt_bool_list(constraints) constraints_list = super(Constraints, self).__add__(constraints_list) return Constraints(constraint_list=constraints_list) def __iadd__(self, constraints: Iterable[Union[bool, Bool]]) -> "Constraints": """ :param constraints: :return: """ list_constraints = self._get_smt_bool_list(constraints) super(Constraints, self).__iadd__(list_constraints) return self @staticmethod def _get_smt_bool_list(constraints: Iterable[Union[bool, Bool]]) -> List[Bool]: return [ ( constraint if isinstance(constraint, Bool) else symbol_factory.Bool(constraint) ) for constraint in constraints ] def get_all_constraints(self): return self[:] + [keccak_function_manager.create_conditions()] def __hash__(self): return tuple(self[:]).__hash__() ================================================ FILE: mythril/laser/ethereum/state/environment.py ================================================ """This module contains the representation for an execution state's environment.""" from typing import Dict from z3 import ExprRef from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.calldata import BaseCalldata from mythril.laser.smt import symbol_factory class Environment: """The environment class represents the current execution environment for the symbolic executor.""" def __init__( self, active_account: Account, sender: ExprRef, calldata: BaseCalldata, gasprice: ExprRef, callvalue: ExprRef, origin: ExprRef, basefee: ExprRef, code=None, static=False, ) -> None: """ :param active_account: :param sender: :param calldata: :param gasprice: :param callvalue: :param origin: :param code: :param static: Makes the environment static. """ # Metadata self.active_account = active_account self.active_function_name = "" self.address = active_account.address # TODO: Add tx_2 > tx_1 then block_no(tx_2) > block_no(tx_1) self.block_number = symbol_factory.BitVecSym("block_number", 256) self.chainid = symbol_factory.BitVecSym("chain_id", 256) # Ib self.code = active_account.code if code is None else code self.sender = sender self.calldata = calldata self.gasprice = gasprice self.origin = origin self.callvalue = callvalue self.static = static self.basefee = basefee def __str__(self) -> str: """ :return: """ return str(self.as_dict) @property def as_dict(self) -> Dict: """ :return: """ return dict( active_account=self.active_account, sender=self.sender, calldata=self.calldata, gasprice=self.gasprice, callvalue=self.callvalue, origin=self.origin, ) ================================================ FILE: mythril/laser/ethereum/state/global_state.py ================================================ """This module contains a representation of the global execution state.""" from copy import copy, deepcopy from typing import TYPE_CHECKING, Dict, Iterable, List, Union from z3 import BitVec from mythril.laser.ethereum.cfg import Node from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.smt import symbol_factory if TYPE_CHECKING: from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, MessageCallTransaction, ) class GlobalState: """GlobalState represents the current globalstate.""" def __init__( self, world_state: "WorldState", environment: Environment, node: Node, machine_state=None, transaction_stack=None, last_return_data=None, annotations=None, ) -> None: """Constructor for GlobalState. :param world_state: :param environment: :param node: :param machine_state: :param transaction_stack: :param last_return_data: :param annotations: """ self.node = node self.world_state = world_state self.environment = environment self.mstate = ( machine_state if machine_state else MachineState(gas_limit=1000000000) ) self.transaction_stack = transaction_stack if transaction_stack else [] self.op_code = "" self.last_return_data = last_return_data self._annotations = annotations or [] def add_annotations(self, annotations: List[StateAnnotation]): """ Function used to add annotations to global state :param annotations: :return: """ self._annotations += annotations def __copy__(self) -> "GlobalState": """ :return: """ world_state = copy(self.world_state) environment = copy(self.environment) mstate = deepcopy(self.mstate) transaction_stack = copy(self.transaction_stack) environment.active_account = world_state[environment.active_account.address] return GlobalState( world_state, environment, self.node, mstate, transaction_stack=transaction_stack, last_return_data=self.last_return_data, annotations=[copy(a) for a in self._annotations], ) def __deepcopy__(self, _) -> "GlobalState": """ Deepcopy is much slower than copy, since it deepcopies constraints. :return: """ world_state = deepcopy(self.world_state) environment = copy(self.environment) mstate = deepcopy(self.mstate) transaction_stack = copy(self.transaction_stack) environment.active_account = world_state[environment.active_account.address] return GlobalState( world_state, environment, self.node, mstate, transaction_stack=transaction_stack, last_return_data=self.last_return_data, annotations=[copy(a) for a in self._annotations], ) @property def accounts(self) -> Dict: """ :return: """ return self.world_state._accounts # TODO: remove this, as two instructions are confusing def get_current_instruction(self) -> Dict: """Gets the current instruction for this GlobalState. :return: """ instructions = self.environment.code.instruction_list try: return instructions[self.mstate.pc] except IndexError: return {"address": self.mstate.pc, "opcode": "STOP"} @property def current_transaction( self, ) -> Union["MessageCallTransaction", "ContractCreationTransaction", None]: """ :return: """ # TODO: Remove circular to transaction package to import Transaction classes try: return self.transaction_stack[-1][0] except IndexError: return None @property def instruction(self) -> Dict: """ :return: """ return self.get_current_instruction() def new_bitvec(self, name: str, size=256, annotations=None) -> BitVec: """ :param name: :param size: :return: """ transaction_id = self.current_transaction.id return symbol_factory.BitVecSym( "{}_{}".format(transaction_id, name), size, annotations=annotations ) def annotate(self, annotation: StateAnnotation) -> None: """ :param annotation: """ self._annotations.append(annotation) if annotation.persist_to_world_state: self.world_state.annotate(annotation) @property def annotations(self) -> List[StateAnnotation]: """ :return: """ return self._annotations def get_annotations(self, annotation_type: type) -> Iterable[StateAnnotation]: """Filters annotations for the queried annotation type. Designed particularly for modules with annotations: globalstate.get_annotations(MySpecificModuleAnnotation) :param annotation_type: The type to filter annotations for :return: filter of matching annotations """ return filter(lambda x: isinstance(x, annotation_type), self.annotations) ================================================ FILE: mythril/laser/ethereum/state/machine_state.py ================================================ """This module contains a representation of the EVM's machine state and its stack.""" from copy import copy from typing import Any, Dict, List, Optional, Sized, Union, cast from eth._utils.numeric import ceil32 from eth.constants import GAS_MEMORY, GAS_MEMORY_QUADRATIC_DENOMINATOR from mythril.laser.ethereum.evm_exceptions import ( OutOfGasException, StackOverflowException, StackUnderflowException, ) from mythril.laser.ethereum.state.memory import Memory from mythril.laser.smt import BitVec, Expression, If, symbol_factory from mythril.laser.smt import SMTBool as Bool class MachineStack(list): """Defines EVM stack, overrides the default list to handle overflows.""" STACK_LIMIT = 1024 def __init__(self, default_list=None) -> None: """ :param default_list: """ super(MachineStack, self).__init__(default_list or []) def append(self, element: Union[int, Expression]) -> None: """ This function ensures the following properties when appending to a list: - Element appended to this list should be a BitVec - Ensures stack overflow bound :param element: element to be appended to the list :function: appends the element to list if the size is less than STACK_LIMIT, else throws an error """ if isinstance(element, int): element = symbol_factory.BitVecVal(element, 256) if isinstance(element, Bool): element = If( element, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256), ) if super(MachineStack, self).__len__() >= self.STACK_LIMIT: raise StackOverflowException( "Reached the EVM stack limit of {}, you can't append more " "elements".format(self.STACK_LIMIT) ) super(MachineStack, self).append(element) def pop(self, index=-1) -> Union[int, Expression]: """ This function ensures stack underflow bound :param index:index to be popped, same as the list() class. :returns popped value :function: same as list() class but throws StackUnderflowException for popping from an empty list """ try: return super(MachineStack, self).pop(index) except IndexError: raise StackUnderflowException("Trying to pop from an empty stack") def __getitem__(self, item: Union[int, slice]) -> Any: """ :param item: :return: """ try: return super(MachineStack, self).__getitem__(item) except IndexError: raise StackUnderflowException( "Trying to access a stack element which doesn't exist" ) def __add__(self, other): """Implement list concatenation if needed. :param other: """ raise NotImplementedError("Implement this if needed") def __iadd__(self, other): """Implement list concatenation if needed. :param other: """ raise NotImplementedError("Implement this if needed") class MachineState: """ MachineState represents current machine state also referenced to as \mu. """ def __init__( self, gas_limit: int, pc=0, stack=None, subroutine_stack=None, memory: Optional[Memory] = None, depth=0, max_gas_used=0, min_gas_used=0, ) -> None: """Constructor for machineState. :param gas_limit: :param pc: :param stack: :param memory: :param depth: :param max_gas_used: :param min_gas_used: """ self.pc = pc self.stack = MachineStack(stack) self.subroutine_stack = MachineStack(subroutine_stack) self.memory = memory or Memory() self.gas_limit = gas_limit self.min_gas_used = min_gas_used # lower gas usage bound self.max_gas_used = max_gas_used # upper gas usage bound self.depth = depth def calculate_extension_size(self, start: int, size: int) -> int: """ :param start: :param size: :return: """ if self.memory_size > start + size: return 0 # The extension size is calculated based on the word length new_size = ceil32(start + size) // 32 old_size = self.memory_size // 32 return (new_size - old_size) * 32 def calculate_memory_gas(self, start: int, size: int): """ :param start: :param size: :return: """ # https://github.com/ethereum/pyethereum/blob/develop/ethereum/vm.py#L148 oldsize = self.memory_size // 32 old_totalfee = ( oldsize * GAS_MEMORY + oldsize**2 // GAS_MEMORY_QUADRATIC_DENOMINATOR ) newsize = ceil32(start + size) // 32 new_totalfee = ( newsize * GAS_MEMORY + newsize**2 // GAS_MEMORY_QUADRATIC_DENOMINATOR ) return new_totalfee - old_totalfee def check_gas(self): """Check whether the machine is out of gas.""" if self.min_gas_used > self.gas_limit: raise OutOfGasException() def mem_extend(self, start: Union[int, BitVec], size: Union[int, BitVec]) -> None: """Extends the memory of this machine state. :param start: Start of memory extension :param size: Size of memory extension """ if (isinstance(start, BitVec) and start.symbolic) or ( isinstance(size, BitVec) and size.symbolic ): return if isinstance(start, BitVec): start = start.value if isinstance(size, BitVec): size = size.value m_extend = self.calculate_extension_size(start, size) if m_extend: extend_gas = self.calculate_memory_gas(start, size) self.min_gas_used += extend_gas self.max_gas_used += extend_gas self.check_gas() self.memory.extend(m_extend) def memory_write(self, offset: int, data: List[Union[int, BitVec]]) -> None: """Writes data to memory starting at offset. :param offset: :param data: """ self.mem_extend(offset, len(data)) self.memory[offset : offset + len(data)] = data def pop(self, amount=1) -> Union[BitVec, List[BitVec]]: """Pops amount elements from the stack. :param amount: :return: """ if amount > len(self.stack): raise StackUnderflowException values = self.stack[-amount:][::-1] del self.stack[-amount:] return values[0] if amount == 1 else values def __deepcopy__(self, memodict=None): """ :param memodict: :return: """ memodict = {} if memodict is None else memodict return MachineState( gas_limit=self.gas_limit, max_gas_used=self.max_gas_used, min_gas_used=self.min_gas_used, pc=self.pc, stack=copy(self.stack), memory=copy(self.memory), depth=self.depth, subroutine_stack=copy(self.subroutine_stack), ) def __str__(self): """ :return: """ return str(self.as_dict) @property def memory_size(self) -> int: """ :return: """ return len(cast(Sized, self.memory)) @property def as_dict(self) -> Dict: """ :return: """ return dict( pc=self.pc, stack=self.stack, subroutine_stack=self.subroutine_stack, memory=self.memory, memsize=self.memory_size, gas=self.gas_limit, max_gas_used=self.max_gas_used, min_gas_used=self.min_gas_used, ) ================================================ FILE: mythril/laser/ethereum/state/memory.py ================================================ """This module contains a representation of a smart contract's memory.""" from copy import copy from typing import Dict, List, Union, cast, overload from z3 import Z3Exception from mythril.laser.ethereum import util from mythril.laser.smt import ( BitVec, Concat, Extract, If, simplify, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) def convert_bv(val: Union[int, BitVec]) -> BitVec: if isinstance(val, BitVec): return val return symbol_factory.BitVecVal(val, 256) # No of iterations to perform when iteration size is symbolic APPROX_ITR = 100 class Memory: """A class representing contract memory with random access.""" def __init__(self): """""" self._msize = 0 self._memory: Dict[BitVec, Union[int, BitVec]] = {} def __len__(self): """ :return: """ return self._msize def __copy__(self): new_memory = Memory() new_memory._memory = copy(self._memory) new_memory._msize = self._msize return new_memory def extend(self, size: int): """ :param size: """ self._msize += size def get_word_at(self, index: int) -> Union[int, BitVec]: """Access a word from a specified memory index. :param index: integer representing the index to access :return: 32 byte word at the specified index """ try: return symbol_factory.BitVecVal( util.concrete_int_from_bytes( bytes([util.get_concrete_int(b) for b in self[index : index + 32]]), 0, ), 256, ) except TypeError: result = simplify( Concat( [ b if isinstance(b, BitVec) else symbol_factory.BitVecVal(b, 8) for b in cast( List[Union[int, BitVec]], self[index : index + 32] ) ] ) ) assert result.size() == 256 return result def write_word_at(self, index: int, value: Union[int, BitVec, bool, Bool]) -> None: """Writes a 32 byte word to memory at the specified index` :param index: index to write to :param value: the value to write to memory """ try: # Attempt to concretize value if isinstance(value, bool): _bytes = ( int(1).to_bytes(32, byteorder="big") if value else int(0).to_bytes(32, byteorder="big") ) else: _bytes = util.concrete_int_to_bytes(value) assert len(_bytes) == 32 self[index : index + 32] = list(bytearray(_bytes)) except (Z3Exception, AttributeError): # BitVector or BoolRef value = cast(Union[BitVec, Bool], value) if isinstance(value, Bool): value_to_write = If( value, symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256), ) else: value_to_write = value assert value_to_write.size() == 256 for i in range(0, value_to_write.size(), 8): self[index + 31 - (i // 8)] = Extract(i + 7, i, value_to_write) @overload def __getitem__(self, item: BitVec) -> Union[int, BitVec]: ... @overload def __getitem__(self, item: slice) -> List[Union[int, BitVec]]: ... def __getitem__( self, item: Union[BitVec, slice] ) -> Union[BitVec, int, List[Union[int, BitVec]]]: """ :param item: :return: """ if isinstance(item, slice): start, step, stop = item.start, item.step, item.stop if start is None: start = 0 if stop is None: # 2**256 is just a bit too big raise IndexError("Invalid Memory Slice") if step is None: step = 1 bvstart, bvstop, bvstep = ( convert_bv(start), convert_bv(stop), convert_bv(step), ) ret_lis = [] symbolic_len = False itr = symbol_factory.BitVecVal(0, 256) if (bvstop - bvstart).symbolic: symbolic_len = True while simplify(bvstep * itr != simplify(bvstop - bvstart)) and ( not symbolic_len or itr <= APPROX_ITR ): ret_lis.append(self[bvstart + bvstep * itr]) itr += 1 return ret_lis item = simplify(convert_bv(item)) return self._memory.get(item, 0) def __setitem__( self, key: Union[int, BitVec, slice], value: Union[BitVec, int, List[Union[int, BitVec]]], ): """ :param key: :param value: """ if isinstance(key, slice): start, step, stop = key.start, key.step, key.stop if start is None: start = 0 if stop is None: raise IndexError("Invalid Memory Slice") if step is None: step = 1 else: assert False, "Currently mentioning step size is not supported" assert isinstance(value, list) bvstart, bvstop, bvstep = ( convert_bv(start), convert_bv(stop), convert_bv(step), ) symbolic_len = False itr = symbol_factory.BitVecVal(0, 256) if (bvstop - bvstart).symbolic: symbolic_len = True while simplify(bvstep * itr != simplify(bvstop - bvstart)) and ( not symbolic_len or itr <= APPROX_ITR ): self[bvstart + itr * bvstep] = cast(List[Union[int, BitVec]], value)[ itr.value ] itr += 1 else: bv_key = simplify(convert_bv(key)) if bv_key >= len(self): return if isinstance(value, int): assert 0 <= value <= 0xFF if isinstance(value, BitVec): assert value.size() == 8 self._memory[bv_key] = cast(Union[int, BitVec], value) ================================================ FILE: mythril/laser/ethereum/state/return_data.py ================================================ """This module declares classes to represent call data.""" from typing import List from mythril.laser.smt import ( BitVec, ) class ReturnData: """Base returndata class.""" def __init__(self, return_data: List[BitVec], return_data_size: BitVec) -> None: """ :param tx_id: """ self.return_data = return_data self.return_data_size = return_data_size @property def size(self) -> BitVec: """ :return: Calldata size for this calldata object """ return self.return_data_size def __getitem__(self, index): if index < self.size: return self.return_data[index] else: return 0 ================================================ FILE: mythril/laser/ethereum/state/transient_storage.py ================================================ from copy import copy, deepcopy from mythril.laser.smt import Concat, K, simplify class TransientStorage: """ Implements transient storage using an SMT Array. This class tracks set operations in a journal and dynamically constructs SMT queries based on the journal entries. """ def __init__(self, journal=None): """ Initializes the TransientStorage object. Args: journal (list): A list to track set operations. Defaults to an empty list. """ self.journal = journal or [] def get(self, addr, index): """ Constructs and returns an SMT query using the journal. Args: addr: Address component of the key. index: Index component of the key. Returns: An SMT query representing the value associated with the given key. """ key = Concat(addr, index) # Size: 256 + 256 dynamic_storage = K(512, 256, 0) # Construct an SMT array based on journal entries for entry in self.journal: current_key, current_value = entry["key"], entry["value"] dynamic_storage[current_key] = current_value return dynamic_storage[key] def set(self, addr, index, value): """ Logs the set operation in the journal. Args: addr: Address component of the key. index: Index component of the key. value: Value to be associated with the key. """ key = simplify(Concat(addr, index)) self.journal.append({"key": key, "value": value}) def clear(self): """ Clears the journal. This method should be called before user transactions. """ self.journal = [] def __copy__(self): """ Returns a shallow copy of the TransientStorage object. """ return TransientStorage(copy(self.journal)) def __deepcopy__(self): """ Returns a deep copy of the TransientStorage object. """ return TransientStorage(deepcopy(self.journal)) ================================================ FILE: mythril/laser/ethereum/state/world_state.py ================================================ """This module contains a representation of the EVM's world state.""" from copy import copy, deepcopy from random import randint from typing import TYPE_CHECKING, Dict, Iterator, List, Optional from eth._utils.address import generate_contract_address from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.transient_storage import TransientStorage from mythril.laser.smt import Array, BitVec, symbol_factory from mythril.support.loader import DynLoader if TYPE_CHECKING: from mythril.laser.ethereum.cfg import Node class WorldState: """The WorldState class represents the world state as described in the yellow paper.""" def __init__( self, transaction_sequence=None, annotations: List[StateAnnotation] = None, constraints: Constraints = None, transient_storage: TransientStorage = None, ) -> None: """Constructor for the world state. Initializes the accounts record. :param transaction_sequence: :param annotations: """ self._accounts: Dict[int, Account] = {} self.balances = Array("balance", 256, 256) self.starting_balances = deepcopy(self.balances) self.constraints = constraints or Constraints() self.node: Optional["Node"] = None self.transaction_sequence = transaction_sequence or [] self._annotations = annotations or [] self.transient_storage = transient_storage or TransientStorage() @property def accounts(self): return self._accounts def __getitem__(self, item: BitVec) -> Account: """Gets an account from the worldstate using item as key. :param item: Address of the account to get :return: Account associated with the address """ try: return self._accounts[item.value] except KeyError: new_account = Account(address=item, code=None, balances=self.balances) self._accounts[item.value] = new_account return new_account def __copy__(self) -> "WorldState": """ :return: """ new_annotations = [copy(a) for a in self._annotations] new_world_state = WorldState( transaction_sequence=self.transaction_sequence[:], annotations=new_annotations, ) new_world_state.balances = copy(self.balances) new_world_state.starting_balances = copy(self.starting_balances) for account in self._accounts.values(): new_world_state.put_account(copy(account)) new_world_state.node = self.node new_world_state.constraints = copy(self.constraints) new_world_state.transient_storage = copy(self.transient_storage) return new_world_state def __deepcopy__(self, _) -> "WorldState": """ :return: """ new_annotations = [copy(a) for a in self._annotations] new_world_state = WorldState( transaction_sequence=self.transaction_sequence[:], annotations=new_annotations, ) new_world_state.balances = copy(self.balances) new_world_state.starting_balances = copy(self.starting_balances) for account in self._accounts.values(): new_world_state.put_account(copy(account)) new_world_state.node = self.node new_world_state.constraints = deepcopy(self.constraints) new_world_state.transient_storage = copy(self.transient_storage) return new_world_state def accounts_exist_or_load(self, addr, dynamic_loader: DynLoader) -> Account: """ returns account if it exists, else it loads from the dynamic loader :param addr: address :param dynamic_loader: Dynamic Loader :return: The code """ if isinstance(addr, str): addr = int(addr, 16) if isinstance(addr, int): addr_bitvec = symbol_factory.BitVecVal(addr, 256) elif not isinstance(addr, BitVec): addr_bitvec = symbol_factory.BitVecVal(int(addr, 16), 256) else: addr_bitvec = addr if addr_bitvec.value in self.accounts: return self.accounts[addr_bitvec.value] if dynamic_loader is None: raise ValueError("dynamic_loader is None") if dynamic_loader.active is False: raise ValueError("Dynamic Loader is deactivated. Use a symbol.") if isinstance(addr, int): try: balance = dynamic_loader.read_balance("{0:#0{1}x}".format(addr, 42)) return self.create_account( balance=balance, address=addr_bitvec.value, dynamic_loader=dynamic_loader, code=dynamic_loader.dynld(addr), concrete_storage=True, ) except ValueError: # Initial balance will be a symbolic variable pass try: code = dynamic_loader.dynld(addr) except ValueError: code = None return self.create_account( address=addr_bitvec.value, dynamic_loader=dynamic_loader, code=code ) def create_account( self, balance=0, address=None, concrete_storage=False, dynamic_loader=None, creator=None, code=None, nonce=0, ) -> Account: """Create non-contract account. :param address: The account's address :param balance: Initial balance for the account :param concrete_storage: Interpret account storage as concrete :param dynamic_loader: used for dynamically loading storage from the block chain :param creator: The address of the creator of the contract if it's a contract :param code: The code of the contract, if it's a contract :param nonce: Nonce of the account :return: The new account """ if creator in self.accounts: nonce = self.accounts[creator].nonce elif creator: self.create_account(address=creator) address = ( symbol_factory.BitVecVal(address, 256) if address is not None else self._generate_new_address(creator, nonce=self.accounts[creator].nonce) ) if creator: self.accounts[creator].nonce += 1 new_account = Account( address=address, balances=self.balances, dynamic_loader=dynamic_loader, concrete_storage=concrete_storage, ) if code: new_account.code = code new_account.nonce = nonce if balance is not None: new_account.set_balance(symbol_factory.BitVecVal(balance, 256)) self.put_account(new_account) return new_account def create_initialized_contract_account(self, contract_code, storage) -> None: """Creates a new contract account, based on the contract code and storage provided The contract code only includes the runtime contract bytecode. :param contract_code: Runtime bytecode for the contract :param storage: Initial storage for the contract :return: The new account """ # TODO: Add type hints new_account = Account( self._generate_new_address(), code=contract_code, balances=self.balances ) new_account.storage = storage self.put_account(new_account) def annotate(self, annotation: StateAnnotation) -> None: """ :param annotation: """ self._annotations.append(annotation) @property def annotations(self) -> List[StateAnnotation]: """ :return: """ return self._annotations def get_annotations(self, annotation_type: type) -> Iterator[StateAnnotation]: """Filters annotations for the queried annotation type. Designed particularly for modules with annotations: worldstate.get_annotations(MySpecificModuleAnnotation) :param annotation_type: The type to filter annotations for :return: filter of matching annotations """ return filter(lambda x: isinstance(x, annotation_type), self.annotations) def _generate_new_address(self, creator=None, nonce=0) -> BitVec: """Generates a new address for the global state. :return: """ if creator: # TODO: Use nounce address = "0x" + str(generate_contract_address(creator, nonce).hex()) return symbol_factory.BitVecVal(int(address, 16), 256) while True: address = "0x" + "".join([str(hex(randint(0, 16)))[-1] for _ in range(40)]) if address not in self._accounts.keys(): return symbol_factory.BitVecVal(int(address, 16), 256) def put_account(self, account: Account) -> None: """ :param account: """ self._accounts[account.address.value] = account account._balances = self.balances ================================================ FILE: mythril/laser/ethereum/strategy/__init__.py ================================================ from abc import ABC, abstractmethod from typing import List from mythril.laser.ethereum.state.global_state import GlobalState class BasicSearchStrategy(ABC): """ A basic search strategy which halts based on depth """ def __init__(self, work_list, max_depth, **kwargs): self.work_list: List[GlobalState] = work_list self.max_depth: int = max_depth def __iter__(self): return self @abstractmethod def get_strategic_global_state(self): """""" raise NotImplementedError("Must be implemented by a subclass") def run_check(self): return True def __next__(self): try: global_state = self.get_strategic_global_state() if global_state.mstate.depth >= self.max_depth: return self.__next__() return global_state except (IndexError, StopIteration): raise StopIteration class CriterionSearchStrategy(BasicSearchStrategy): """ If a criterion is satisfied, the search halts """ def __init__(self, work_list, max_depth, **kwargs): super().__init__(work_list, max_depth, **kwargs) self._satisfied_criterion = False def get_strategic_global_state(self): if self._satisfied_criterion: raise StopIteration try: return self.get_strategic_global_state() except StopIteration: raise StopIteration def set_criterion_satisfied(self): self._satisfied_criterion = True ================================================ FILE: mythril/laser/ethereum/strategy/basic.py ================================================ """This module implements basic symbolic execution search strategies.""" from random import choices, randrange from mythril.laser.ethereum.state.global_state import GlobalState from . import BasicSearchStrategy class DepthFirstSearchStrategy(BasicSearchStrategy): """Implements a depth first search strategy I.E. Follow one path to a leaf, and then continue to the next one """ def get_strategic_global_state(self) -> GlobalState: """ :return: """ return self.work_list.pop() def view_strategic_global_state(self) -> GlobalState: """ :return: """ return self.work_list[-1] class BreadthFirstSearchStrategy(BasicSearchStrategy): """Implements a breadth first search strategy I.E. Execute all states of a "level" before continuing """ def get_strategic_global_state(self) -> GlobalState: """ :return: """ return self.work_list.pop(0) def view_strategic_global_state(self) -> GlobalState: """ :return: """ return self.work_list[0] class ReturnRandomNaivelyStrategy(BasicSearchStrategy): """chooses a random state from the worklist with equal likelihood.""" def __init__(self, work_list, max_depth, **kwargs): super().__init__(work_list, max_depth, **kwargs) self.previous_random_value = -1 def get_strategic_global_state(self) -> GlobalState: """ :return: """ if len(self.work_list) > 0: if self.previous_random_value == -1: return self.work_list.pop(randrange(len(self.work_list))) else: new_state = self.work_list.pop(self.previous_random_value) self.previous_random_value = -1 return new_state else: raise IndexError def view_strategic_global_state(self) -> GlobalState: """ :return: """ if len(self.work_list) > 0: self.previous_random_value = randrange(len(self.work_list)) return self.work_list[self.previous_random_value] else: raise IndexError class ReturnWeightedRandomStrategy(BasicSearchStrategy): """chooses a random state from the worklist with likelihood based on inverse proportion to depth.""" def __init__(self, work_list, max_depth, **kwargs): super().__init__(work_list, max_depth, **kwargs) self.previous_random_value = -1 def get_strategic_global_state(self) -> GlobalState: """ :return: """ probability_distribution = [ 1 / (global_state.mstate.depth + 1) for global_state in self.work_list ] if self.previous_random_value != -1: ns = self.work_list.pop(self.previous_random_value) self.previous_random_value = -1 return ns else: return self.work_list.pop( choices(range(len(self.work_list)), probability_distribution)[0] ) def view_strategic_global_state(self) -> GlobalState: """ :return: """ probability_distribution = [ 1 / (global_state.mstate.depth + 1) for global_state in self.work_list ] self.previous_random_value = choices( range(len(self.work_list)), probability_distribution )[0] return self.work_list[self.previous_random_value] ================================================ FILE: mythril/laser/ethereum/strategy/beam.py ================================================ from mythril.laser.ethereum.state.global_state import GlobalState from . import BasicSearchStrategy class BeamSearch(BasicSearchStrategy): """chooses a random state from the worklist with equal likelihood.""" def __init__(self, work_list, max_depth, beam_width, **kwargs): super().__init__(work_list, max_depth) self.beam_width = beam_width @staticmethod def beam_priority(state): return sum([annotation.search_importance for annotation in state._annotations]) def sort_and_eliminate_states(self): self.work_list.sort(key=lambda state: self.beam_priority(state), reverse=True) del self.work_list[self.beam_width :] def view_strategic_global_state(self) -> GlobalState: """ :return: """ self.sort_and_eliminate_states() if len(self.work_list) > 0: return self.work_list[0] else: raise IndexError def get_strategic_global_state(self) -> GlobalState: """ :return: """ self.sort_and_eliminate_states() if len(self.work_list) > 0: return self.work_list.pop(0) else: raise IndexError ================================================ FILE: mythril/laser/ethereum/strategy/concolic.py ================================================ import logging import operator from copy import copy from functools import reduce from typing import Any, Dict, List, Tuple, cast from mythril.analysis.solver import get_transaction_sequence from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import Not from . import CriterionSearchStrategy log = logging.getLogger(__name__) class TraceAnnotation(StateAnnotation): """ This is the annotation used by the ConcolicStrategy to store concolic traces. """ def __init__(self, trace=None): self.trace = trace or [] @property def persist_over_calls(self) -> bool: return True def __copy__(self): return TraceAnnotation(copy(self.trace)) class ConcolicStrategy(CriterionSearchStrategy): """ Executes program concolically using the input trace till a specific branch """ def __init__( self, work_list: List[GlobalState], max_depth: int, trace: List[List[Tuple[int, str]]], flip_branch_addresses: List[str], ): """ work_list: The work-list of states max_depth: The maximum depth for the strategy to go through trace: This is the trace to be followed, each element is of the type Tuple(program counter, tx_id) flip_branch_addresses: Branch addresses to be flipped. """ super().__init__(work_list, max_depth) self.trace: List[Tuple[int, str]] = reduce(operator.iconcat, trace, []) self.last_tx_count: int = len(trace) self.flip_branch_addresses: List[str] = flip_branch_addresses self.results: Dict[str, Dict[str, Any]] = {} def check_completion_criterion(self): if len(self.flip_branch_addresses) == len(self.results): self.set_criterion_satisfied() def get_strategic_global_state(self) -> GlobalState: """ This function does the following:- 1) Choose the states by following the concolic trace. 2) In case we have an executed JUMPI that is in flip_branch_addresses, flip that branch. :return: """ while len(self.work_list) > 0: state = self.work_list.pop() seq_id = len(state.world_state.transaction_sequence) trace_annotations = cast( List[TraceAnnotation], list(state.world_state.get_annotations(TraceAnnotation)), ) if len(trace_annotations) == 0: annotation = TraceAnnotation() state.world_state.annotate(annotation) else: annotation = trace_annotations[0] # Appends trace annotation.trace.append((state.mstate.pc, state.current_transaction.id)) # If length of trace is 1 then it is not a JUMPI if len(annotation.trace) < 2: # If trace does not follow the specified path, ignore the state if annotation.trace != self.trace[: len(annotation.trace)]: continue return state # Get the address of the previous pc addr: str = str( state.environment.code.instruction_list[annotation.trace[-2][0]][ "address" ] ) if ( annotation.trace == self.trace[: len(annotation.trace)] and seq_id == self.last_tx_count and addr in self.flip_branch_addresses and addr not in self.results ): if ( state.environment.code.instruction_list[annotation.trace[-2][0]][ "opcode" ] != "JUMPI" ): log.error( f"The branch {addr} does not lead " "to a jump address, skipping this branch" ) continue constraints = Constraints(state.world_state.constraints[:-1]) constraints.append(Not(state.world_state.constraints[-1])) try: self.results[addr] = get_transaction_sequence(state, constraints) except UnsatError: self.results[addr] = None elif annotation.trace != self.trace[: len(annotation.trace)]: continue self.check_completion_criterion() return state raise StopIteration ================================================ FILE: mythril/laser/ethereum/strategy/constraint_strategy.py ================================================ import logging from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.strategy.basic import BasicSearchStrategy from mythril.support.support_utils import ModelCache log = logging.getLogger(__name__) class DelayConstraintStrategy(BasicSearchStrategy): def __init__(self, work_list, max_depth, **kwargs): super().__init__(work_list, max_depth) self.model_cache = ModelCache() self.pending_worklist = [] log.info("Loaded search strategy extension: DelayConstraintStrategy") def get_strategic_global_state(self) -> GlobalState: """Returns the next state :return: Global state """ while len(self.work_list) == 0: state = self.pending_worklist.pop(0) model = state.world_state.constraints.get_model() if model is not None: self.model_cache.put(model, 1) self.work_list.append(state) state = self.work_list.pop(0) return state ================================================ FILE: mythril/laser/ethereum/strategy/extensions/__init__.py ================================================ ================================================ FILE: mythril/laser/ethereum/strategy/extensions/bounded_loops.py ================================================ import logging from copy import copy from typing import Dict, List, cast from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.strategy.basic import BasicSearchStrategy from mythril.laser.ethereum.transaction import ContractCreationTransaction log = logging.getLogger(__name__) class JumpdestCountAnnotation(StateAnnotation): """State annotation that counts the number of jumps per destination.""" def __init__(self) -> None: self._reached_count: Dict[int, int] = {} self.trace: List[int] = [] def __copy__(self): result = JumpdestCountAnnotation() result._reached_count = copy(self._reached_count) result.trace = copy(self.trace) return result class BoundedLoopsStrategy(BasicSearchStrategy): """Adds loop pruning to the search strategy. Ignores JUMPI instruction if the destination was targeted >JUMPDEST_LIMIT times. """ def __init__(self, super_strategy: BasicSearchStrategy, **kwargs) -> None: """""" self.super_strategy = super_strategy self.bound = kwargs["loop_bound"] log.info( "Loaded search strategy extension: Loop bounds (limit = {})".format( self.bound ) ) BasicSearchStrategy.__init__( self, super_strategy.work_list, super_strategy.max_depth, **kwargs ) @staticmethod def calculate_hash(i: int, j: int, trace: List[int]) -> int: """ calculate hash(trace[i: j]) :param i: :param j: :param trace: :return: hash(trace[i: j]) """ key = 0 size = 0 for itr in range(i, j): key |= trace[itr] << ((itr - i) * 8) size += 1 return key @staticmethod def count_key(trace: List[int], key: int, start: int, size: int) -> int: """ Count continuous loops in the trace. :param trace: :param key: :param size: :return: """ count = 1 i = start while i >= 0: if BoundedLoopsStrategy.calculate_hash(i, i + size, trace) != key: break count += 1 i -= size return count @staticmethod def get_loop_count(trace: List[int]) -> int: """ Gets the loop count :param trace: annotation trace :return: """ found = False for i in range(len(trace) - 3, 0, -1): if trace[i] == trace[-2] and trace[i + 1] == trace[-1]: found = True break if found: key = BoundedLoopsStrategy.calculate_hash(i + 1, len(trace) - 1, trace) size = len(trace) - i - 2 count = BoundedLoopsStrategy.count_key(trace, key, i + 1, size) else: count = 0 return count def get_strategic_global_state(self) -> GlobalState: """Returns the next state :return: Global state """ while True: state = self.super_strategy.get_strategic_global_state() annotations = cast( List[JumpdestCountAnnotation], list(state.get_annotations(JumpdestCountAnnotation)), ) if len(annotations) == 0: annotation = JumpdestCountAnnotation() state.annotate(annotation) else: annotation = annotations[0] cur_instr = state.get_current_instruction() annotation.trace.append(cur_instr["address"]) if cur_instr["opcode"].upper() != "JUMPDEST": return state # create unique instruction identifier count = BoundedLoopsStrategy.get_loop_count(annotation.trace) # The creation transaction gets a higher loop bound to give it a better chance of success. # TODO: There's probably a nicer way to do this if isinstance( state.current_transaction, ContractCreationTransaction ) and count < max(128, self.bound): return state elif count > self.bound: log.debug("Loop bound reached, skipping state") continue return state ================================================ FILE: mythril/laser/ethereum/svm.py ================================================ """This module implements the main symbolic execution engine.""" import logging import random from abc import ABCMeta from collections import defaultdict from copy import copy from datetime import datetime, timedelta from typing import Callable, DefaultDict, Dict, List, Optional, Tuple from mythril.analysis.potential_issues import check_potential_issues from mythril.laser.ethereum.cfg import Edge, JumpType, Node, NodeFlags from mythril.laser.ethereum.evm_exceptions import StackUnderflowException, VmException from mythril.laser.ethereum.instruction_data import get_required_stack_elements from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.strategy.basic import DepthFirstSearchStrategy from mythril.laser.ethereum.strategy.constraint_strategy import DelayConstraintStrategy from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction import ( ContractCreationTransaction, TransactionEndSignal, TransactionStartSignal, execute_contract_creation, execute_message_call, ) from mythril.laser.execution_info import ExecutionInfo from mythril.laser.plugin.signals import PluginSkipState, PluginSkipWorldState from mythril.laser.smt import And, simplify, symbol_factory from mythril.support.opcodes import OPCODES from mythril.support.support_args import args log = logging.getLogger(__name__) class SVMError(Exception): """An exception denoting an unexpected state in symbolic execution.""" pass class LaserEVM: """The LASER EVM. Just as Mithril had to be mined at great efforts to provide the Dwarves with their exceptional armour, LASER stands at the heart of Mythril, digging deep in the depths of call graphs, unearthing the most precious symbolic call data, that is then hand-forged into beautiful and strong security issues by the experienced smiths we call detection modules. It is truly a magnificent symbiosis. """ def __init__( self, dynamic_loader=None, max_depth=float("inf"), execution_timeout=60, create_timeout=10, strategy=DepthFirstSearchStrategy, transaction_count=2, requires_statespace=True, iprof=None, use_reachability_check=True, beam_width=None, tx_strategy=None, ) -> None: """ Initializes the laser evm object :param dynamic_loader: Loads data from chain :param max_depth: Maximum execution depth this vm should execute :param execution_timeout: Time to take for execution :param create_timeout: Time to take for contract creation :param strategy: Execution search strategy :param transaction_count: The amount of transactions to execute :param requires_statespace: Variable indicating whether the statespace should be recorded :param iprof: Instruction Profiler :param use_reachability_check: Runs reachability check by solving constraints :param beam_width: The beam width for search strategies :param tx_strategy: A global tx prioritisation strategy """ self.execution_info: List[ExecutionInfo] = [] self.open_states: List[WorldState] = [] self.total_states = 0 self.dynamic_loader = dynamic_loader self.use_reachability_check = use_reachability_check self.work_list: List[GlobalState] = [] self.strategy = strategy(self.work_list, max_depth, beam_width=beam_width) self.max_depth = max_depth self.transaction_count = transaction_count self.tx_strategy = tx_strategy self.execution_timeout = execution_timeout or 0 self.create_timeout = create_timeout or 0 self.requires_statespace = requires_statespace if self.requires_statespace: self.nodes: Dict[int, Node] = {} self.edges: List[Edge] = [] self.time: datetime = None self.executed_transactions: bool = False self.pre_hooks: DefaultDict[str, List[Callable]] = defaultdict(list) self.post_hooks: DefaultDict[str, List[Callable]] = defaultdict(list) self._add_world_state_hooks: List[Callable] = [] self._execute_state_hooks: List[Callable] = [] self._start_exec_trans_hooks: List[Callable] = [] self._stop_exec_trans_hooks: List[Callable] = [] self._start_sym_trans_hooks: List[Callable] = [] self._stop_sym_trans_hooks: List[Callable] = [] self._start_sym_exec_hooks: List[Callable] = [] self._stop_sym_exec_hooks: List[Callable] = [] self._start_exec_hooks: List[Callable] = [] self._stop_exec_hooks: List[Callable] = [] self._transaction_end_hooks: List[Callable] = [] self.iprof = iprof self.instr_pre_hook: Dict[str, List[Callable]] = {} self.instr_post_hook: Dict[str, List[Callable]] = {} for op in OPCODES: self.instr_pre_hook[op] = [] self.instr_post_hook[op] = [] self.hook_type_map = { "start_execute_transactions": self._start_exec_trans_hooks, "stop_execute_transactions": self._stop_exec_trans_hooks, "add_world_state": self._add_world_state_hooks, "execute_state": self._execute_state_hooks, "start_sym_exec": self._start_sym_exec_hooks, "stop_sym_exec": self._stop_sym_exec_hooks, "start_sym_trans": self._start_sym_trans_hooks, "stop_sym_trans": self._stop_sym_trans_hooks, "start_exec": self._start_exec_hooks, "stop_exec": self._stop_exec_hooks, "transaction_end": self._transaction_end_hooks, } log.info("LASER EVM initialized with dynamic loader: " + str(dynamic_loader)) def extend_strategy(self, extension: ABCMeta, **kwargs) -> None: self.strategy = extension(self.strategy, **kwargs) def sym_exec( self, world_state: WorldState = None, target_address: int = None, creation_code: str = None, contract_name: str = None, ) -> None: """Starts symbolic execution There are two modes of execution. Either we analyze a preconfigured configuration, in which case the world_state and target_address variables must be supplied. Or we execute the creation code of a contract, in which case the creation code and desired name of that contract should be provided. :param world_state The world state configuration from which to perform analysis :param target_address The address of the contract account in the world state which analysis should target :param creation_code The creation code to create the target contract in the symbolic environment :param contract_name The name that the created account should be associated with """ pre_configuration_mode = target_address is not None scratch_mode = creation_code is not None and contract_name is not None if pre_configuration_mode == scratch_mode: raise ValueError("Symbolic execution started with invalid parameters") log.debug("Starting LASER execution") for hook in self._start_sym_exec_hooks: hook() time_handler.start_execution(self.execution_timeout) self.time = datetime.now() if pre_configuration_mode: self.open_states = [world_state] log.info("Starting message call transaction to {}".format(target_address)) self.execute_transactions(symbol_factory.BitVecVal(target_address, 256)) elif scratch_mode: log.info("Starting contract creation transaction") created_account = execute_contract_creation( self, creation_code, contract_name, world_state=world_state ) log.info( "Finished contract creation, found {} open states".format( len(self.open_states) ) ) if len(self.open_states) == 0: log.warning( "No contract was created during the execution of contract creation " "Increase the resources for creation execution (--max-depth or --create-timeout) " "Check whether the bytecode is indeed the creation code, otherwise use the --bin-runtime flag" ) self.execute_transactions(created_account.address) log.info("Finished symbolic execution") if self.requires_statespace: log.info( "%d nodes, %d edges, %d total states", len(self.nodes), len(self.edges), self.total_states, ) for hook in self._stop_sym_exec_hooks: hook() def execute_transactions(self, address) -> None: """This function helps runs plugins that can order transactions. Such plugins should set self.executed_transactions as True after its execution :param address: Address of the contract :return: None """ for hook in self._start_exec_trans_hooks: hook() if self.tx_strategy is None: if self.executed_transactions is False: self.time = datetime.now() self._execute_transactions_incremental( address, txs=args.transaction_sequences ) else: self.time = datetime.now() self._execute_transactions_non_ordered(address) for hook in self._stop_exec_trans_hooks: hook() def _execute_transactions_non_ordered(self, address): """ This function executes multiple transactions non-incrementally, using some type priority ordering :param address: Address of the contract :return: """ for txs in self.strategy: log.info(f"Executing the sequence: {txs}") self._execute_transactions_incremental(address, txs=txs) def _execute_transactions_incremental(self, address, txs=None): """This function executes multiple transactions incrementally on the address :param address: Address of the contract :return: """ for i in range(self.transaction_count): if len(self.open_states) == 0: break old_states_count = len(self.open_states) # Clear journal at every new user transaction for state in self.open_states: state.transient_storage.clear() if self.use_reachability_check: if isinstance(self.strategy, DelayConstraintStrategy): open_states = [] for state in self.open_states: c_val = self.strategy.model_cache.check_quick_sat( simplify(And(*state.world_state.constraints)).raw ) if c_val: open_states.append(self.open_states) else: self.strategy.pending_worklist.append(state) else: self.open_states = [ state for state in self.open_states if state.constraints.is_possible() ] prune_count = old_states_count - len(self.open_states) if prune_count: log.info("Pruned {} unreachable states".format(prune_count)) log.info( "Starting message call transaction, iteration: {}, {} initial states".format( i, len(self.open_states) ) ) func_hashes = txs[i] if txs else None if func_hashes: for itr, func_hash in enumerate(func_hashes): if func_hash in (-1, -2): func_hashes[itr] = func_hash else: func_hashes[itr] = bytes.fromhex(hex(func_hash)[2:].zfill(8)) for hook in self._start_sym_trans_hooks: hook() execute_message_call(self, address, func_hashes=func_hashes) for hook in self._stop_sym_trans_hooks: hook() self.executed_transactions = True def _check_create_termination(self) -> bool: if len(self.open_states) != 0: return ( self.create_timeout > 0 and self.time + timedelta(seconds=self.create_timeout) <= datetime.now() ) return self._check_execution_termination() def _check_execution_termination(self) -> bool: return ( self.execution_timeout > 0 and self.time + timedelta(seconds=self.execution_timeout) <= datetime.now() ) def exec(self, create=False, track_gas=False) -> Optional[List[GlobalState]]: """ :param create: :param track_gas: :return: """ final_states: List[GlobalState] = [] for hook in self._start_exec_hooks: hook() for global_state in self.strategy: if create and self._check_create_termination(): log.debug("Hit create timeout, returning.") return final_states + [global_state] if track_gas else None if not create and self._check_execution_termination(): log.debug("Hit execution timeout, returning.") return final_states + [global_state] if track_gas else None try: new_states, op_code = self.execute_state(global_state) except NotImplementedError: log.debug("Encountered unimplemented instruction") continue if self.strategy.run_check() and ( len(new_states) > 1 and random.uniform(0, 1) < args.pruning_factor ): new_states = [ state for state in new_states if state.world_state.constraints.is_possible() ] self.manage_cfg(op_code, new_states) # TODO: What about op_code is None? if new_states: self.work_list += new_states elif track_gas: final_states.append(global_state) self.total_states += len(new_states) for hook in self._stop_exec_hooks: hook() return final_states if track_gas else None def _add_world_state(self, global_state: GlobalState): """Stores the world_state of the passed global state in the open states""" for hook in self._add_world_state_hooks: try: hook(global_state) except PluginSkipWorldState: return self.open_states.append(global_state.world_state) def handle_vm_exception( self, global_state: GlobalState, op_code: str, error_msg: str ) -> List[GlobalState]: _, return_global_state = global_state.transaction_stack.pop() if return_global_state is None: # In this case we don't put an unmodified world state in the open_states list Since in the case of an # exceptional halt all changes should be discarded, and this world state would not provide us with a # previously unseen world state log.debug("Encountered a VmException, ending path: `{}`".format(error_msg)) new_global_states: List[GlobalState] = [] else: # First execute the post hook for the transaction ending instruction self._execute_post_hook(op_code, [global_state]) new_global_states = self._end_message_call( return_global_state, global_state, revert_changes=True, return_data=None ) return new_global_states def execute_state( self, global_state: GlobalState ) -> Tuple[List[GlobalState], Optional[str]]: """Execute a single instruction in global_state. :param global_state: :return: A list of successor states. """ # Execute hooks try: for hook in self._execute_state_hooks: hook(global_state) except PluginSkipState: return [], None instructions = global_state.environment.code.instruction_list try: op_code = instructions[global_state.mstate.pc]["opcode"] except IndexError: self._add_world_state(global_state) return [], None if len(global_state.mstate.stack) < get_required_stack_elements(op_code): error_msg = ( "Stack Underflow Exception due to insufficient " "stack elements for the address {}".format( instructions[global_state.mstate.pc]["address"] ) ) new_global_states = self.handle_vm_exception( global_state, op_code, error_msg ) self._execute_post_hook(op_code, new_global_states) return new_global_states, op_code try: self._execute_pre_hook(op_code, global_state) except PluginSkipState: return [], None try: new_global_states = Instruction( op_code, self.dynamic_loader, pre_hooks=self.instr_pre_hook[op_code], post_hooks=self.instr_post_hook[op_code], ).evaluate(global_state) except VmException as e: for hook in self._transaction_end_hooks: hook( global_state, global_state.current_transaction, None, False, ) new_global_states = self.handle_vm_exception(global_state, op_code, str(e)) except TransactionStartSignal as start_signal: # Setup new global state new_global_state = start_signal.transaction.initial_global_state() new_global_state.transaction_stack = copy( global_state.transaction_stack ) + [(start_signal.transaction, global_state)] new_global_state.node = global_state.node new_global_state.world_state.constraints = ( start_signal.global_state.world_state.constraints ) log.debug("Starting new transaction %s", start_signal.transaction) return [new_global_state], op_code except TransactionEndSignal as end_signal: ( transaction, return_global_state, ) = end_signal.global_state.transaction_stack[-1] log.debug("Ending transaction %s.", transaction) for hook in self._transaction_end_hooks: hook( end_signal.global_state, transaction, return_global_state, end_signal.revert, ) if return_global_state is None: if ( not isinstance(transaction, ContractCreationTransaction) or transaction.return_data ) and not end_signal.revert: check_potential_issues(global_state) end_signal.global_state.world_state.node = global_state.node self._add_world_state(end_signal.global_state) new_global_states = [] else: # First execute the post hook for the transaction ending instruction self._execute_post_hook(op_code, [end_signal.global_state]) # Propagate annotations new_annotations = [ annotation for annotation in global_state.annotations if annotation.persist_over_calls ] return_global_state.add_annotations(new_annotations) new_global_states = self._end_message_call( copy(return_global_state), global_state, revert_changes=False or end_signal.revert, return_data=transaction.return_data, ) self._execute_post_hook(op_code, new_global_states) return new_global_states, op_code def _end_message_call( self, return_global_state: GlobalState, global_state: GlobalState, revert_changes=False, return_data=None, ) -> List[GlobalState]: """ :param return_global_state: :param global_state: :param revert_changes: :param return_data: :return: """ return_global_state.world_state.constraints += ( global_state.world_state.constraints ) # Resume execution of the transaction initializing instruction op_code = return_global_state.environment.code.instruction_list[ return_global_state.mstate.pc ]["opcode"] # Set execution result in the return_state return_global_state.last_return_data = return_data if not revert_changes: return_global_state.world_state = copy(global_state.world_state) return_global_state.environment.active_account = global_state.accounts[ return_global_state.environment.active_account.address.value ] if isinstance( global_state.current_transaction, ContractCreationTransaction ): return_global_state.mstate.min_gas_used += ( global_state.mstate.min_gas_used ) return_global_state.mstate.max_gas_used += ( global_state.mstate.max_gas_used ) try: # Execute the post instruction handler new_global_states = Instruction( op_code, self.dynamic_loader, pre_hooks=self.instr_pre_hook[op_code], post_hooks=self.instr_post_hook[op_code], ).evaluate(return_global_state, True) except VmException: new_global_states = [] # In order to get a nice call graph we need to set the nodes here for state in new_global_states: state.node = global_state.node return new_global_states def manage_cfg(self, opcode: str, new_states: List[GlobalState]) -> None: """ :param opcode: :param new_states: """ if opcode == "JUMP": assert len(new_states) <= 1 for state in new_states: self._new_node_state(state) elif opcode == "JUMPI": assert len(new_states) <= 2 for state in new_states: self._new_node_state( state, JumpType.CONDITIONAL, state.world_state.constraints[-1] ) elif opcode == "RETURN": for state in new_states: self._new_node_state(state, JumpType.RETURN) for state in new_states: state.node.states.append(state) def _new_node_state( self, state: GlobalState, edge_type=JumpType.UNCONDITIONAL, condition=None ) -> None: """ :param state: :param edge_type: :param condition: """ try: address = state.environment.code.instruction_list[state.mstate.pc][ "address" ] except IndexError: return new_node = Node(state.environment.active_account.contract_name) old_node = state.node state.node = new_node new_node.constraints = state.world_state.constraints if self.requires_statespace: self.nodes[new_node.uid] = new_node self.edges.append( Edge( old_node.uid, new_node.uid, edge_type=edge_type, condition=condition ) ) if edge_type == JumpType.RETURN: new_node.flags |= NodeFlags.CALL_RETURN elif edge_type == JumpType.CALL: try: if "retval" in str(state.mstate.stack[-1]): new_node.flags |= NodeFlags.CALL_RETURN else: new_node.flags |= NodeFlags.FUNC_ENTRY except StackUnderflowException: new_node.flags |= NodeFlags.FUNC_ENTRY environment = state.environment disassembly = environment.code # Only set when encountering new JUMPI if edge_type == JumpType.CONDITIONAL: if isinstance( state.world_state.transaction_sequence[-1], ContractCreationTransaction ): environment.active_function_name = "constructor" elif address in disassembly.address_to_function_name: # Enter a new function environment.active_function_name = disassembly.address_to_function_name[ address ] new_node.flags |= NodeFlags.FUNC_ENTRY log.debug( "- Entering function " + environment.active_account.contract_name + ":" + new_node.function_name ) elif address == 0: environment.active_function_name = "fallback" new_node.function_name = environment.active_function_name def register_hooks(self, hook_type: str, hook_dict: Dict[str, List[Callable]]): """ :param hook_type: :param hook_dict: """ if hook_type == "pre": entrypoint = self.pre_hooks elif hook_type == "post": entrypoint = self.post_hooks else: raise ValueError( "Invalid hook type %s. Must be one of {pre, post}", hook_type ) for op_code, funcs in hook_dict.items(): entrypoint[op_code].extend(funcs) def register_laser_hooks(self, hook_type: str, hook: Callable): """registers the hook with this Laser VM""" if hook_type in self.hook_type_map: self.hook_type_map[hook_type].append(hook) else: raise ValueError(f"Invalid hook type {hook_type}") def register_instr_hooks(self, hook_type: str, opcode: str, hook: Callable): """Registers instructions hooks from plugins""" if hook_type == "pre": if opcode is None: for op in OPCODES: self.instr_pre_hook[op].append(hook(op)) else: self.instr_pre_hook[opcode].append(hook) else: if opcode is None: for op in OPCODES: self.instr_post_hook[op].append(hook(op)) else: self.instr_post_hook[opcode].append(hook) def instr_hook(self, hook_type, opcode) -> Callable: """Registers the annotated function with register_instr_hooks :param hook_type: Type of hook pre/post :param opcode: The opcode related to the function """ def hook_decorator(func: Callable): """Hook decorator generated by laser_hook :param func: Decorated function """ self.register_instr_hooks(hook_type, opcode, func) return hook_decorator def laser_hook(self, hook_type: str) -> Callable: """Registers the annotated function with register_laser_hooks :param hook_type: :return: hook decorator """ def hook_decorator(func: Callable): """Hook decorator generated by laser_hook :param func: Decorated function """ self.register_laser_hooks(hook_type, func) return func return hook_decorator def _execute_pre_hook(self, op_code: str, global_state: GlobalState) -> None: """ :param op_code: :param global_state: :return: """ if op_code not in self.pre_hooks.keys(): return for hook in self.pre_hooks[op_code]: hook(global_state) def _execute_post_hook( self, op_code: str, global_states: List[GlobalState] ) -> None: """ :param op_code: :param global_states: :return: """ if op_code not in self.post_hooks.keys(): return for hook in self.post_hooks[op_code]: for global_state in global_states: try: hook(global_state) except PluginSkipState: global_states.remove(global_state) def pre_hook(self, op_code: str) -> Callable: """ :param op_code: :return: """ def hook_decorator(func: Callable): """ :param func: :return: """ if op_code not in self.pre_hooks.keys(): self.pre_hooks[op_code] = [] self.pre_hooks[op_code].append(func) return func return hook_decorator def post_hook(self, op_code: str) -> Callable: """ :param op_code: :return: """ def hook_decorator(func: Callable): """ :param func: :return: """ if op_code not in self.post_hooks.keys(): self.post_hooks[op_code] = [] self.post_hooks[op_code].append(func) return func return hook_decorator ================================================ FILE: mythril/laser/ethereum/time_handler.py ================================================ import time from mythril.support.support_utils import Singleton class TimeHandler(object, metaclass=Singleton): def __init__(self): self._start_time = None self._execution_time = None def start_execution(self, execution_time): self._start_time = int(time.time() * 1000) self._execution_time = execution_time * 1000 def time_remaining(self): return self._execution_time - (int(time.time() * 1000) - self._start_time) time_handler = TimeHandler() ================================================ FILE: mythril/laser/ethereum/transaction/__init__.py ================================================ from mythril.laser.ethereum.transaction.symbolic import ( execute_contract_creation, execute_message_call, ) from mythril.laser.ethereum.transaction.transaction_models import * ================================================ FILE: mythril/laser/ethereum/transaction/concolic.py ================================================ """This module contains functions to set up and execute concolic message calls.""" import binascii from typing import List, Union from mythril.disassembler.disassembly import Disassembly from mythril.exceptions import IllegalArgumentError from mythril.laser.ethereum.cfg import Edge, JumpType, Node from mythril.laser.ethereum.state.calldata import ConcreteCalldata from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, MessageCallTransaction, tx_id_manager, ) from mythril.laser.smt import symbol_factory def execute_contract_creation( laser_evm, callee_address, caller_address, origin_address, data, gas_limit, gas_price, value, code=None, track_gas=False, contract_name=None, ): """Executes a contract creation transaction concretely. :param laser_evm: :param callee_address: :param caller_address: :param origin_address: :param code: :param data: :param gas_limit: :param gas_price: :param value: :param track_gas: :return: """ open_states: List[WorldState] = laser_evm.open_states[:] del laser_evm.open_states[:] data = binascii.b2a_hex(data).decode("utf-8") for open_world_state in open_states: next_transaction_id = tx_id_manager.get_next_tx_id() transaction = ContractCreationTransaction( world_state=open_world_state, identifier=next_transaction_id, gas_price=gas_price, gas_limit=gas_limit, # block gas limit origin=origin_address, code=Disassembly(data), caller=caller_address, contract_name=contract_name, call_data=None, call_value=value, ) _setup_global_state_for_execution(laser_evm, transaction) return laser_evm.exec(True, track_gas=track_gas) def execute_message_call( laser_evm, callee_address, caller_address, origin_address, data, gas_limit, gas_price, value, code=None, track_gas=False, ) -> Union[None, List[GlobalState]]: """Execute a message call transaction from all open states. :param laser_evm: :param callee_address: :param caller_address: :param origin_address: :param code: :param data: :param gas_limit: :param gas_price: :param value: :param track_gas: :return: """ open_states: List[WorldState] = laser_evm.open_states[:] del laser_evm.open_states[:] for open_world_state in open_states: next_transaction_id = tx_id_manager.get_next_tx_id() code = code or open_world_state[callee_address].code.bytecode transaction = MessageCallTransaction( world_state=open_world_state, identifier=next_transaction_id, gas_price=gas_price, gas_limit=gas_limit, origin=origin_address, code=Disassembly(code), caller=caller_address, callee_account=open_world_state[callee_address], call_data=ConcreteCalldata(next_transaction_id, data), call_value=value, ) _setup_global_state_for_execution(laser_evm, transaction) return laser_evm.exec(track_gas=track_gas) def _setup_global_state_for_execution(laser_evm, transaction) -> None: """Set up global state and cfg for a transactions execution. :param laser_evm: :param transaction: """ # TODO: Resolve circular import between .transaction and ..svm to import LaserEVM here global_state = transaction.initial_global_state() global_state.transaction_stack.append((transaction, None)) new_node = Node( global_state.environment.active_account.contract_name, function_name=global_state.environment.active_function_name, ) if laser_evm.requires_statespace: laser_evm.nodes[new_node.uid] = new_node if transaction.world_state.node and laser_evm.requires_statespace: laser_evm.edges.append( Edge( transaction.world_state.node.uid, new_node.uid, edge_type=JumpType.Transaction, condition=None, ) ) new_node.constraints = global_state.world_state.constraints global_state.world_state.transaction_sequence.append(transaction) global_state.node = new_node new_node.states.append(global_state) laser_evm.work_list.append(global_state) def execute_transaction(*args, **kwargs) -> Union[None, List[GlobalState]]: """ Chooses the transaction type based on callee address and executes the transaction """ try: if kwargs["callee_address"] == "": if kwargs["caller_address"] == "": kwargs["caller_address"] = kwargs["origin"] return execute_contract_creation(*args, **kwargs) kwargs["callee_address"] = symbol_factory.BitVecVal( int(kwargs["callee_address"], 16), 256 ) except KeyError as k: raise IllegalArgumentError(f"Argument not found: {k}") return execute_message_call(*args, **kwargs) ================================================ FILE: mythril/laser/ethereum/transaction/symbolic.py ================================================ """This module contains functions setting up and executing transactions with symbolic values.""" import logging from typing import List, Optional from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.cfg import Edge, JumpType, Node from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.calldata import SymbolicCalldata from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import ( BaseTransaction, ContractCreationTransaction, MessageCallTransaction, tx_id_manager, ) from mythril.laser.smt import BitVec, Or, symbol_factory from mythril.laser.smt import SMTBool as Bool FUNCTION_HASH_BYTE_LENGTH = 4 log = logging.getLogger(__name__) class Actors: def __init__( self, creator=0xAFFEAFFEAFFEAFFEAFFEAFFEAFFEAFFEAFFEAFFE, attacker=0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF, someguy=0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, ): self.addresses = { "CREATOR": symbol_factory.BitVecVal(creator, 256), "ATTACKER": symbol_factory.BitVecVal(attacker, 256), "SOMEGUY": symbol_factory.BitVecVal(someguy, 256), } def __setitem__(self, actor: str, address: Optional[str]): """ Sets an actor to a desired address :param actor: Name of the actor to set :param address: Address to set the actor to. None to delete the actor """ if address is None: if actor in ("CREATOR", "ATTACKER"): raise ValueError("Can't delete creator or attacker address") del self.addresses[actor] else: if address[0:2] != "0x": raise ValueError("Actor address not in valid format") self.addresses[actor] = symbol_factory.BitVecVal(int(address[2:], 16), 256) def __getitem__(self, actor: str): return self.addresses[actor] @property def creator(self): return self.addresses["CREATOR"] @property def attacker(self): return self.addresses["ATTACKER"] def __len__(self): return len(self.addresses) ACTORS = Actors() def generate_function_constraints( calldata: SymbolicCalldata, func_hashes: List[List[int]] ) -> List[Bool]: """ This will generate constraints for fixing the function call part of calldata :param calldata: Calldata :param func_hashes: The list of function hashes allowed for this transaction :return: Constraints List """ if len(func_hashes) == 0: return [] constraints = [] for i in range(FUNCTION_HASH_BYTE_LENGTH): constraint = Bool(False) for func_hash in func_hashes: if func_hash == -1: # Fallback function without calldata constraint = Or(constraint, calldata.size < 4) elif func_hash == -2: # Receive function constraint = Or(constraint, calldata.size == 0) else: constraint = Or( constraint, calldata[i] == symbol_factory.BitVecVal(func_hash[i], 8) ) constraints.append(constraint) return constraints def execute_message_call( laser_evm, callee_address: BitVec, func_hashes: List[List[int]] = None ) -> None: """Executes a message call transaction from all open states. :param laser_evm: :param callee_address: """ # TODO: Resolve circular import between .transaction and ..svm to import LaserEVM here open_states = laser_evm.open_states[:] del laser_evm.open_states[:] for open_world_state in open_states: if open_world_state[callee_address].deleted: log.debug("Can not execute dead contract, skipping.") continue next_transaction_id = tx_id_manager.get_next_tx_id() external_sender = symbol_factory.BitVecSym( "sender_{}".format(next_transaction_id), 256 ) calldata = SymbolicCalldata(next_transaction_id) transaction = MessageCallTransaction( world_state=open_world_state, identifier=next_transaction_id, gas_price=symbol_factory.BitVecSym( "gas_price{}".format(next_transaction_id), 256 ), gas_limit=8000000, # block gas limit origin=external_sender, caller=external_sender, callee_account=open_world_state[callee_address], call_data=calldata, call_value=symbol_factory.BitVecSym( "call_value{}".format(next_transaction_id), 256 ), ) constraints = ( generate_function_constraints(calldata, func_hashes) if func_hashes else None ) _setup_global_state_for_execution(laser_evm, transaction, constraints) laser_evm.exec() def execute_contract_creation( laser_evm, contract_initialization_code, contract_name=None, world_state=None, origin=ACTORS["CREATOR"], caller=ACTORS["CREATOR"], ) -> Account: """Executes a contract creation transaction from all open states. :param laser_evm: :param contract_initialization_code: :param contract_name: :return: """ world_state = world_state or WorldState() open_states = [world_state] del laser_evm.open_states[:] new_account = None for open_world_state in open_states: next_transaction_id = tx_id_manager.get_next_tx_id() # call_data "should" be '[]', but it is easier to model the calldata symbolically # and add logic in codecopy/codesize/calldatacopy/calldatasize than to model code "correctly" transaction = ContractCreationTransaction( world_state=open_world_state, identifier=next_transaction_id, gas_price=symbol_factory.BitVecSym( "gas_price{}".format(next_transaction_id), 256 ), gas_limit=8000000, # block gas limit origin=origin, code=Disassembly(contract_initialization_code), caller=caller, contract_name=contract_name, call_data=None, call_value=symbol_factory.BitVecSym( "call_value{}".format(next_transaction_id), 256 ), ) _setup_global_state_for_execution(laser_evm, transaction) new_account = new_account or transaction.callee_account laser_evm.exec(True) return new_account def _setup_global_state_for_execution( laser_evm, transaction: BaseTransaction, initial_constraints: Optional[List[Bool]] = None, ) -> None: """Sets up global state and cfg for a transactions execution. :param laser_evm: :param transaction: """ # TODO: Resolve circular import between .transaction and ..svm to import LaserEVM here global_state = transaction.initial_global_state() global_state.transaction_stack.append((transaction, None)) global_state.world_state.constraints += initial_constraints or [] global_state.world_state.constraints.append( Or(*[transaction.caller == actor for actor in ACTORS.addresses.values()]) ) new_node = Node( global_state.environment.active_account.contract_name, function_name=global_state.environment.active_function_name, ) if laser_evm.requires_statespace: laser_evm.nodes[new_node.uid] = new_node if transaction.world_state.node: if laser_evm.requires_statespace: laser_evm.edges.append( Edge( transaction.world_state.node.uid, new_node.uid, edge_type=JumpType.Transaction, condition=None, ) ) new_node.constraints = global_state.world_state.constraints global_state.world_state.transaction_sequence.append(transaction) global_state.node = new_node new_node.states.append(global_state) laser_evm.work_list.append(global_state) def execute_transaction(*args, **kwargs): """ Chooses the transaction type based on callee address and executes the transaction """ laser_evm = args[0] if kwargs["callee_address"] == "": for ws in laser_evm.open_states[:]: execute_contract_creation( laser_evm=laser_evm, contract_initialization_code=kwargs["data"], world_state=ws, ) return execute_message_call( laser_evm=laser_evm, callee_address=symbol_factory.BitVecVal(int(kwargs["callee_address"], 16), 256), ) ================================================ FILE: mythril/laser/ethereum/transaction/transaction_models.py ================================================ """This module contains the transaction models used throughout LASER's symbolic execution.""" import logging from copy import deepcopy from typing import Optional, Union from z3 import ExprRef from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.calldata import ( BaseCalldata, ConcreteCalldata, SymbolicCalldata, ) from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.return_data import ReturnData from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.smt import UGE, BitVec, symbol_factory from mythril.support.support_utils import Singleton log = logging.getLogger(__name__) class TxIdManager(object, metaclass=Singleton): def __init__(self): self._next_transaction_id = 0 def get_next_tx_id(self): self._next_transaction_id += 1 return str(self._next_transaction_id) def restart_counter(self): self._next_transaction_id = 0 def set_counter(self, tx_id): self._next_transaction_id = tx_id tx_id_manager = TxIdManager() class TransactionEndSignal(Exception): """Exception raised when a transaction is finalized.""" def __init__(self, global_state: GlobalState, revert=False) -> None: self.global_state = global_state self.revert = revert class TransactionStartSignal(Exception): """Exception raised when a new transaction is started.""" def __init__( self, transaction: Union["MessageCallTransaction", "ContractCreationTransaction"], op_code: str, global_state: GlobalState, ) -> None: self.transaction = transaction self.op_code = op_code self.global_state = global_state class BaseTransaction: """Basic transaction class holding common data.""" def __init__( self, world_state: WorldState, callee_account: Account = None, caller: ExprRef = None, call_data=None, identifier: Optional[str] = None, gas_price=None, gas_limit=None, origin=None, code=None, call_value=None, init_call_data=True, static=False, base_fee=None, ) -> None: assert isinstance(world_state, WorldState) self.world_state = world_state self.id = identifier or tx_id_manager.get_next_tx_id() self.gas_price = ( gas_price if gas_price is not None else symbol_factory.BitVecSym(f"gasprice{identifier}", 256) ) self.base_fee = ( base_fee if base_fee is not None else symbol_factory.BitVecSym(f"basefee{identifier}", 256) ) self.gas_limit = gas_limit self.origin = ( origin if origin is not None else symbol_factory.BitVecSym(f"origin{identifier}", 256) ) self.code = code self.caller = caller self.callee_account = callee_account if call_data is None and init_call_data: self.call_data: BaseCalldata = SymbolicCalldata(self.id) else: self.call_data = ( call_data if isinstance(call_data, BaseCalldata) else ConcreteCalldata(self.id, []) ) self.call_value = ( call_value if call_value is not None else symbol_factory.BitVecSym(f"callvalue{identifier}", 256) ) self.static = static self.return_data: Optional[ReturnData] = None def initial_global_state_from_environment(self, environment, active_function): """ :param environment: :param active_function: :return: """ # Initialize the execution environment global_state = GlobalState(self.world_state, environment, None) global_state.environment.active_function_name = active_function sender = environment.sender receiver = environment.active_account.address value = ( environment.callvalue if isinstance(environment.callvalue, BitVec) else symbol_factory.BitVecVal(environment.callvalue, 256) ) global_state.world_state.constraints.append( UGE(global_state.world_state.balances[sender], value) ) global_state.world_state.balances[receiver] += value global_state.world_state.balances[sender] -= value return global_state def initial_global_state(self) -> GlobalState: raise NotImplementedError def __str__(self) -> str: if self.callee_account is None or self.callee_account.address.symbolic is False: return "{} {} from {} to {:#42x}".format( self.__class__.__name__, self.id, self.caller, int(str(self.callee_account.address)) if self.callee_account else -1, ) else: return "{} {} from {} to {}".format( self.__class__.__name__, self.id, self.caller, str(self.callee_account.address), ) class MessageCallTransaction(BaseTransaction): """Transaction object models an transaction.""" def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) def initial_global_state(self) -> GlobalState: """Initialize the execution environment.""" environment = Environment( self.callee_account, self.caller, self.call_data, self.gas_price, self.call_value, self.origin, self.base_fee, code=self.code or self.callee_account.code, static=self.static, ) return super().initial_global_state_from_environment( environment, active_function="fallback" ) def end(self, global_state: GlobalState, return_data=None, revert=False) -> None: """ :param global_state: :param return_data: :param revert: """ self.return_data = return_data raise TransactionEndSignal(global_state, revert) class ContractCreationTransaction(BaseTransaction): """Transaction object models an transaction.""" def __init__( self, world_state: WorldState, caller: ExprRef = None, call_data=None, identifier: Optional[str] = None, gas_price=None, gas_limit=None, origin=None, code=None, call_value=None, contract_name=None, contract_address=None, base_fee=None, ) -> None: self.prev_world_state = deepcopy(world_state) contract_address = ( contract_address if isinstance(contract_address, int) else None ) # Balance set to None to allow for pre-existing ether. callee_account = world_state.create_account( None, concrete_storage=True, creator=caller.value, address=contract_address ) callee_account.contract_name = contract_name or callee_account.contract_name # init_call_data "should" be false, but it is easier to model the calldata symbolically # and add logic in codecopy/codesize/calldatacopy/calldatasize than to model code "correctly" super().__init__( world_state=world_state, callee_account=callee_account, caller=caller, call_data=call_data, identifier=identifier, gas_price=gas_price, gas_limit=gas_limit, origin=origin, code=code, call_value=call_value, init_call_data=True, base_fee=base_fee, ) def initial_global_state(self) -> GlobalState: """Initialize the execution environment.""" environment = Environment( active_account=self.callee_account, sender=self.caller, calldata=self.call_data, gasprice=self.gas_price, callvalue=self.call_value, origin=self.origin, basefee=self.base_fee, code=self.code, ) return super().initial_global_state_from_environment( environment, active_function="constructor" ) def end(self, global_state: GlobalState, return_data=None, revert=False): """ :param global_state: :param return_data: :param revert: """ if return_data is None or return_data.size == 0: self.return_data = None raise TransactionEndSignal(global_state, revert=revert) global_state.environment.active_account.code.assign_bytecode( tuple(return_data.return_data) ) return_data = str(hex(global_state.environment.active_account.address.value)) self.return_data: Optional[ReturnData] = ReturnData( return_data, symbol_factory.BitVecVal(len(return_data) // 2, 256) ) assert global_state.environment.active_account.code.instruction_list != [] raise TransactionEndSignal(global_state, revert=revert) ================================================ FILE: mythril/laser/ethereum/tx_prioritiser/__init__.py ================================================ from .rf_prioritiser import RfTxPrioritiser ================================================ FILE: mythril/laser/ethereum/tx_prioritiser/rf_prioritiser.py ================================================ import logging import pickle import numpy as np log = logging.getLogger(__name__) class RfTxPrioritiser: def __init__(self, contract, depth=3, model_path=None): self.rf_path = None self.contract = contract self.depth = depth with open(model_path, "rb") as file: self.model = pickle.load(file) if self.contract.features is None: log.info( "There are no available features. Rf based Tx Prioritisation turned off." ) return None self.preprocessed_features = self.preprocess_features(self.contract.features) self.recent_predictions = [] def preprocess_features(self, features_dict): flat_features = [] for function_name, function_features in features_dict.items(): function_features_values = list(function_features.values()) flat_features.extend(function_features_values) return np.array(flat_features).reshape(1, -1) def __next__(self, address): predictions_sequence = [] current_features = np.concatenate( [ self.preprocessed_features, np.array(self.recent_predictions).reshape(1, -1), ], axis=1, ) for i in range(self.depth): predictions = self.model.predict_proba(current_features) most_likely_next_tx = np.argmax(predictions, axis=1)[0] predictions_sequence.append(most_likely_next_tx) current_features = np.concatenate( [ self.preprocessed_features, np.array( self.recent_predictions + predictions_sequence[: i + 1] ).reshape(1, -1), ], axis=1, ) self.recent_predictions.extend(predictions_sequence) while len(self.recent_predictions) > self.depth: self.recent_predictions.pop(0) return predictions_sequence ================================================ FILE: mythril/laser/ethereum/util.py ================================================ """This module contains various utility conversion functions and constants for LASER.""" import re from typing import TYPE_CHECKING, Dict, List, Union, cast if TYPE_CHECKING: from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.smt import ( BitVec, Expression, If, simplify, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) TT256 = 2**256 TT256M1 = 2**256 - 1 TT255 = 2**255 def safe_decode(hex_encoded_string: str) -> bytes: """ :param hex_encoded_string: :return: """ if hex_encoded_string.startswith("0x"): return bytes.fromhex(hex_encoded_string[2:]) else: return bytes.fromhex(hex_encoded_string) def insert_ret_val(global_state: "GlobalState"): retval = global_state.new_bitvec( "retval_" + str(global_state.get_current_instruction()["address"]), 256 ) global_state.mstate.stack.append(retval) global_state.world_state.constraints.append(retval == 1) def to_signed(i: int) -> int: """ :param i: :return: """ return i if i < TT255 else i - TT256 def get_instruction_index( instruction_list: List[Dict], address: int ) -> Union[int, None]: """ :param instruction_list: :param address: :return: """ index = 0 for instr in instruction_list: if instr["address"] >= address: return index index += 1 return None def get_trace_line(instr: Dict, state: "MachineState") -> str: """ :param instr: :param state: :return: """ stack = str(state.stack[::-1]) # stack = re.sub("(\d+)", lambda m: hex(int(m.group(1))), stack) stack = re.sub("\n", "", stack) return str(instr["address"]) + " " + instr["opcode"] + "\tSTACK: " + stack def pop_bitvec(state: "MachineState") -> BitVec: """ :param state: :return: """ # pop one element from stack, converting boolean expressions and # concrete Python variables to BitVecVal item = state.stack.pop() if isinstance(item, Bool): return If( cast(Bool, item), symbol_factory.BitVecVal(1, 256), symbol_factory.BitVecVal(0, 256), ) elif isinstance(item, int): return symbol_factory.BitVecVal(item, 256) else: item = cast(BitVec, item) return simplify(item) def get_concrete_int(item: Union[int, Expression]) -> int: """ :param item: :return: """ if isinstance(item, int): return item elif isinstance(item, BitVec): if item.symbolic: raise TypeError("Got a symbolic BitVecRef") return item.value elif isinstance(item, Bool): value = item.value if value is None: raise TypeError("Symbolic boolref encountered") return value assert False, "Unhandled type {} encountered".format(str(type(item))) def concrete_int_from_bytes( concrete_bytes: Union[List[Union[BitVec, int]], bytes], start_index: int ) -> int: """ :param concrete_bytes: :param start_index: :return: """ concrete_bytes = [ byte.value if isinstance(byte, BitVec) and not byte.symbolic else byte for byte in concrete_bytes ] integer_bytes = concrete_bytes[start_index : start_index + 32] # The below statement is expected to fail in some circumstances whose error is caught return int.from_bytes(integer_bytes, byteorder="big") # type: ignore def concrete_int_to_bytes(val): """ :param val: :return: """ # logging.debug("concrete_int_to_bytes " + str(val)) if isinstance(val, int): return val.to_bytes(32, byteorder="big") return simplify(val).value.to_bytes(32, byteorder="big") def bytearray_to_int(arr): """ :param arr: :return: """ o = 0 for a in arr: o = (o << 8) + a return o def extract_copy( data: bytearray, mem: bytearray, memstart: int, datastart: int, size: int ): for i in range(size): if datastart + i < len(data): mem[memstart + i] = data[datastart + i] else: mem[memstart + i] = 0 def extract32(data: bytearray, i: int) -> int: """ :param data: :param i: :return: """ if i >= len(data): return 0 o = data[i : min(i + 32, len(data))] o.extend(bytearray(32 - len(o))) return bytearray_to_int(o) ================================================ FILE: mythril/laser/execution_info.py ================================================ from abc import ABC, abstractmethod class ExecutionInfo(ABC): @abstractmethod def as_dict(self): """Returns a dictionary with the execution info contained in this object The returned dictionary only uses primitive types. """ pass ================================================ FILE: mythril/laser/plugin/__init__.py ================================================ """Laser plugins This module contains everything to do with laser plugins Laser plugins are a way of extending laser's functionality without complicating the core business logic. Different features that have been implemented in the form of plugins are: - benchmarking - path pruning Plugins also provide a way to implement optimisations outside of the mythril code base and to inject them. The api that laser currently provides is still unstable and will probably change to suit our needs as more plugins get developed. For the implementation of plugins the following modules are of interest: - laser.plugins.plugin - laser.plugins.signals - laser.svm Which show the basic interfaces with which plugins are able to interact """ ================================================ FILE: mythril/laser/plugin/builder.py ================================================ from abc import ABC, abstractmethod from mythril.laser.plugin.interface import LaserPlugin class PluginBuilder(ABC): """PluginBuilder The plugin builder interface enables construction of Laser plugins """ name = "Default Plugin Name" def __init__(self): self.enabled = True @abstractmethod def __call__(self, *args, **kwargs) -> LaserPlugin: """Constructs the plugin""" pass ================================================ FILE: mythril/laser/plugin/interface.py ================================================ from mythril.laser.ethereum.svm import LaserEVM class LaserPlugin: """Base class for laser plugins Functionality in laser that the symbolic execution process does not need to depend on can be implemented in the form of a laser plugin. Laser plugins implement the function initialize(symbolic_vm) which is called with the laser virtual machine when they are loaded. Regularly a plugin will introduce several hooks into laser in this function Plugins can direct actions by raising Signals defined in mythril.laser.ethereum.plugins.signals For example, a pruning plugin might raise the PluginSkipWorldState signal. """ def initialize(self, symbolic_vm: LaserEVM) -> None: """Initializes this plugin on the symbolic virtual machine :param symbolic_vm: symbolic virtual machine to initialize the laser plugin on """ raise NotImplementedError ================================================ FILE: mythril/laser/plugin/loader.py ================================================ import logging from typing import Dict, List, Optional from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin from mythril.support.support_utils import Singleton log = logging.getLogger(__name__) class LaserPluginLoader(object, metaclass=Singleton): """ The LaserPluginLoader is used to abstract the logic relating to plugins. Components outside of laser thus don't have to be aware of the interface that plugins provide """ def __init__(self) -> None: """Initializes the plugin loader""" self.laser_plugin_builders: Dict[str, PluginBuilder] = {} self.plugin_args: Dict[str, Dict] = {} self.plugin_list: Dict[str, LaserPlugin] = {} def add_args(self, plugin_name, **kwargs): self.plugin_args[plugin_name] = kwargs def load(self, plugin_builder: PluginBuilder) -> None: """Enables a Laser Plugin :param plugin_builder: Builder that constructs the plugin """ log.info(f"Loading laser plugin: {plugin_builder.name}") if plugin_builder.name in self.laser_plugin_builders: log.warning( f"Laser plugin with name {plugin_builder.name} was already loaded, skipping..." ) return self.laser_plugin_builders[plugin_builder.name] = plugin_builder def is_enabled(self, plugin_name: str) -> bool: """Returns whether the plugin is loaded in the symbolic_vm :param plugin_name: Name of the plugin to check """ if plugin_name not in self.laser_plugin_builders: return False else: return self.laser_plugin_builders[plugin_name].enabled def enable(self, plugin_name: str): if plugin_name not in self.laser_plugin_builders: return ValueError(f"Plugin with name: {plugin_name} was not loaded") self.laser_plugin_builders[plugin_name].enabled = True def instrument_virtual_machine( self, symbolic_vm: LaserEVM, with_plugins: Optional[List[str]] ): """Load enabled plugins into the passed symbolic virtual machine :param symbolic_vm: The virtual machine to instrument the plugins with :param with_plugins: Override the globally enabled/disabled builders and load all plugins in the list """ for plugin_name, plugin_builder in self.laser_plugin_builders.items(): enabled = ( plugin_builder.enabled if not with_plugins else plugin_name in with_plugins ) if not enabled: continue log.info(f"Instrumenting symbolic vm with plugin: {plugin_name}") plugin = plugin_builder(**self.plugin_args.get(plugin_name, {})) plugin.initialize(symbolic_vm) self.plugin_list[plugin_name] = plugin ================================================ FILE: mythril/laser/plugin/plugins/__init__.py ================================================ """Plugin implementations This module contains the implementation of some features - benchmarking - pruning """ from mythril.laser.plugin.plugins.benchmark import BenchmarkPluginBuilder from mythril.laser.plugin.plugins.call_depth_limiter import CallDepthLimitBuilder from mythril.laser.plugin.plugins.coverage.coverage_plugin import CoveragePluginBuilder from mythril.laser.plugin.plugins.coverage_metrics import CoverageMetricsPluginBuilder from mythril.laser.plugin.plugins.dependency_pruner import DependencyPrunerBuilder from mythril.laser.plugin.plugins.instruction_profiler import InstructionProfilerBuilder from mythril.laser.plugin.plugins.mutation_pruner import MutationPrunerBuilder from mythril.laser.plugin.plugins.state_merge import StateMergePluginBuilder from mythril.laser.plugin.plugins.summary import SymbolicSummaryPluginBuilder from mythril.laser.plugin.plugins.trace import TraceFinderBuilder ================================================ FILE: mythril/laser/plugin/plugins/benchmark.py ================================================ import logging from time import time import matplotlib.pyplot as plt from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin log = logging.getLogger(__name__) class BenchmarkPluginBuilder(PluginBuilder): name = "benchmark" def __call__(self, *args, **kwargs): return BenchmarkPlugin() # TODO: introduce dependency on coverage plugin class BenchmarkPlugin(LaserPlugin): """Benchmark Plugin This plugin aggregates the following information: - duration - code coverage over time - final code coverage - total number of executed instructions """ def __init__(self, name=None): """Creates BenchmarkPlugin :param name: name of this benchmark, used for storing the results """ self.nr_of_executed_insns = 0 self.begin = None self.end = None self.coverage = {} self.name = name def initialize(self, symbolic_vm: LaserEVM): """Initializes the BenchmarkPlugin Introduces hooks in symbolic_vm to track the desired values :param symbolic_vm: Symbolic virtual machine to analyze """ self._reset() @symbolic_vm.laser_hook("execute_state") def execute_state_hook(_): current_time = time() - self.begin self.nr_of_executed_insns += 1 for key, value in symbolic_vm.coverage.items(): try: self.coverage[key][current_time] = sum(value[1]) * 100 / value[0] except KeyError: self.coverage[key] = {} self.coverage[key][current_time] = sum(value[1]) * 100 / value[0] @symbolic_vm.laser_hook("start_sym_exec") def start_sym_exec_hook(): self.begin = time() @symbolic_vm.laser_hook("stop_sym_exec") def stop_sym_exec_hook(): self.end = time() self._write_to_graph() self._store_report() def _reset(self): """Reset this plugin""" self.nr_of_executed_insns = 0 self.begin = None self.end = None self.coverage = {} def _store_report(self): """Store the results of this plugin""" pass def _write_to_graph(self): """Write the coverage results to a graph""" traces = [] for _, trace_data in self.coverage.items(): traces += [list(trace_data.keys()), list(trace_data.values()), "r--"] plt.plot(*traces) plt.axis([0, self.end - self.begin, 0, 100]) plt.xlabel("Duration (seconds)") plt.ylabel("Coverage (percentage)") plt.savefig("{}.png".format(self.name)) ================================================ FILE: mythril/laser/plugin/plugins/call_depth_limiter.py ================================================ from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin from mythril.laser.plugin.signals import PluginSkipState class CallDepthLimitBuilder(PluginBuilder): name = "call-depth-limit" def __call__(self, *args, **kwargs): return CallDepthLimit(kwargs["call_depth_limit"]) class CallDepthLimit(LaserPlugin): def __init__(self, call_depth_limit: int): self.call_depth_limit = call_depth_limit def initialize(self, symbolic_vm: LaserEVM): """Initializes the mutation pruner Introduces hooks for SSTORE operations :param symbolic_vm: :return: """ @symbolic_vm.pre_hook("CALL") def sstore_mutator_hook(global_state: GlobalState): if len(global_state.transaction_stack) - 1 == self.call_depth_limit: raise PluginSkipState ================================================ FILE: mythril/laser/plugin/plugins/coverage/__init__.py ================================================ from mythril.laser.plugin.plugins.coverage.coverage_plugin import ( InstructionCoveragePlugin, ) ================================================ FILE: mythril/laser/plugin/plugins/coverage/coverage_plugin.py ================================================ import logging from typing import Dict, List, Tuple from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin log = logging.getLogger(__name__) class CoveragePluginBuilder(PluginBuilder): name = "coverage" def __call__(self, *args, **kwargs): return InstructionCoveragePlugin() class InstructionCoveragePlugin(LaserPlugin): """InstructionCoveragePlugin This plugin measures the instruction coverage of mythril. The instruction coverage is the ratio between the instructions that have been executed and the total amount of instructions. Note that with lazy constraint solving enabled that this metric will be "unsound" as reachability will not be considered for the calculation of instruction coverage. """ def __init__(self): self.coverage: Dict[str, Tuple[int, List[bool]]] = {} self.initial_coverage = 0 self.tx_id = 0 def initialize(self, symbolic_vm: LaserEVM): """Initializes the instruction coverage plugin Introduces hooks for each instruction :param symbolic_vm: :return: """ self.coverage = {} self.initial_coverage = 0 self.tx_id = 0 @symbolic_vm.laser_hook("stop_sym_exec") def stop_sym_exec_hook(): # Print results for code, code_cov in self.coverage.items(): if sum(code_cov[1]) == 0 and code_cov[0] == 0: cov_percentage = 0 else: cov_percentage = sum(code_cov[1]) / float(code_cov[0]) * 100 string_code = code if isinstance(code, tuple): try: string_code = bytearray(code).hex() except TypeError: string_code = "" log.info( "Achieved {:.2f}% coverage for code: {}".format( cov_percentage, string_code ) ) @symbolic_vm.laser_hook("execute_state") def execute_state_hook(global_state: GlobalState): # Record coverage code = global_state.environment.code.bytecode if code not in self.coverage.keys(): number_of_instructions = len( global_state.environment.code.instruction_list ) self.coverage[code] = ( number_of_instructions, [False] * number_of_instructions, ) if global_state.mstate.pc >= len(self.coverage[code][1]): # Instruction beyond the instruction list are considered as STOP by EVM # and can be ignored return self.coverage[code][1][global_state.mstate.pc] = True @symbolic_vm.laser_hook("start_sym_trans") def execute_start_sym_trans_hook(): self.initial_coverage = self._get_covered_instructions() @symbolic_vm.laser_hook("stop_sym_trans") def execute_stop_sym_trans_hook(): end_coverage = self._get_covered_instructions() log.info( "Number of new instructions covered in tx %d: %d" % (self.tx_id, end_coverage - self.initial_coverage) ) self.tx_id += 1 def _get_covered_instructions(self) -> int: """Gets the total number of covered instructions for all accounts in the svm. :return: """ total_covered_instructions = 0 for _, cv in self.coverage.items(): total_covered_instructions += sum(cv[1]) return total_covered_instructions def is_instruction_covered(self, bytecode, index): if bytecode not in self.coverage.keys(): return False try: return self.coverage[bytecode][index] except IndexError: return False ================================================ FILE: mythril/laser/plugin/plugins/coverage/coverage_strategy.py ================================================ from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.strategy import BasicSearchStrategy from mythril.laser.plugin.plugins.coverage import InstructionCoveragePlugin class CoverageStrategy(BasicSearchStrategy): """Implements a instruction coverage based search strategy This strategy is quite simple and effective, it prioritizes the execution of instructions that have previously been uncovered. Once there is no such global state left in the work list, it will resort to using the super_strategy. This strategy is intended to be used "on top of" another one """ def __init__( self, super_strategy: BasicSearchStrategy, instruction_coverage_plugin: InstructionCoveragePlugin, ): self.super_strategy = super_strategy self.instruction_coverage_plugin = instruction_coverage_plugin BasicSearchStrategy.__init__( self, super_strategy.work_list, super_strategy.max_depth ) def get_strategic_global_state(self) -> GlobalState: """ Returns the first uncovered global state in the work list if it exists, otherwise super_strategy.get_strategic_global_state() is returned. """ for global_state in self.work_list: if not self._is_covered(global_state): self.work_list.remove(global_state) return global_state return self.super_strategy.get_strategic_global_state() def _is_covered(self, global_state: GlobalState) -> bool: """Checks if the instruction for the given global state is already covered""" bytecode = global_state.environment.code.bytecode index = global_state.mstate.pc return self.instruction_coverage_plugin.is_instruction_covered(bytecode, index) ================================================ FILE: mythril/laser/plugin/plugins/coverage_metrics/__init__.py ================================================ from .metrics_plugin import CoverageMetricsPluginBuilder ================================================ FILE: mythril/laser/plugin/plugins/coverage_metrics/constants.py ================================================ BATCH_OF_STATES = 5 ================================================ FILE: mythril/laser/plugin/plugins/coverage_metrics/coverage_data.py ================================================ import json from mythril.laser.execution_info import ExecutionInfo from mythril.support.support_utils import get_code_hash class InstructionCoverageInfo(ExecutionInfo): def __init__(self): self._instruction_coverage = {} # type: Dict[str, int] def as_dict(self): return dict(instruction_discovery_time=self._instruction_coverage) def get_code_instr_hex(self, code: str, instruction: int): code_hash = get_code_hash(code)[2:] instruction_hex = hex(instruction)[2:] return "{}:{}".format(code_hash, instruction_hex) def is_covered(self, code: str, instruction: int): code_instr_hex = self.get_code_instr_hex(code, instruction) return code_instr_hex in self._instruction_coverage def add_data(self, code: str, instruction: int, discovery_time: int): code_instr_hex = self.get_code_instr_hex(code, instruction) self._instruction_coverage[code_instr_hex] = discovery_time def output(self, filename: str): with open(filename, "w") as outfile: json.dump( self._instruction_coverage, default=lambda o: o.__dict__, fp=outfile ) class CoverageData: def __init__( self, instructions_covered: int, total_instructions: int, branches_covered: int, tx_id: int, total_branches: int, state_counter: int, code: str, time_elapsed: int, ): self.instructions_covered = instructions_covered self.total_instructions = total_instructions self.branches_covered = branches_covered self.tx_id = tx_id self.total_branches = total_branches self.state_counter = state_counter self.code_hash = get_code_hash(code)[2:] self.time_elapsed = time_elapsed def as_dict(self): return self.__dict__ class CoverageTimeSeries(ExecutionInfo): def __init__(self): self.coverage = [] # type: List[CoverageData] def output(self, filename: str): with open(filename, "w") as outfile: json.dump(self.coverage, default=lambda o: o.__dict__, fp=outfile) def as_dict(self): return dict(coverage=self.coverage) def add_data(self, *args, **kwargs): cov_data = CoverageData(*args, **kwargs) self.coverage.append(cov_data.as_dict()) ================================================ FILE: mythril/laser/plugin/plugins/coverage_metrics/metrics_plugin.py ================================================ import logging import time from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin from .constants import BATCH_OF_STATES from .coverage_data import ( CoverageTimeSeries, InstructionCoverageInfo, ) log = logging.getLogger(__name__) class CoverageMetricsPluginBuilder(PluginBuilder): """CoveragePlugin Checks Instruction and branch coverage and puts it to data.json file which appears in the directory in which mythril is run. """ plugin_default_enabled = True enabled = True author = "MythX Development Team" plugin_name = "MythX Coverage Metrics" plugin_license = "All rights reserved." plugin_type = "Laser Plugin" plugin_description = ( "This plugin measures coverage throughout symbolic execution," " reporting it at the end in the MythX coverage format." ) def __call__(self, *args, **kwargs): """Constructs the plugin""" return LaserCoveragePlugin() class LaserCoveragePlugin(LaserPlugin): def __init__(self): self.instruction_coverage_data = {} # type: Dict[str, Tuple[int, Dict[bool]]] self.branch_possibilities = {} # type: Dict[str, Dict[int, List]] self.tx_id = 0 self.state_counter = 0 self.coverage = CoverageTimeSeries() self.instruction_coverage_info = InstructionCoverageInfo() self.start_time = time.time_ns() def initialize(self, symbolic_vm: LaserEVM) -> None: """Initializes the instruction coverage plugin Introduces hooks for each instruction :param symbolic_vm: The symbolic virtual machine to initialise this plugin for """ log.info("Initializing coverage metrics plugin") self.instruction_coverage_data = {} self.branch_possibilities = {} self.tx_id = 0 # Add the instruction coverage ExecutionInfo to laser vm for use in reporting symbolic_vm.execution_info.append(self.instruction_coverage_info) symbolic_vm.execution_info.append(self.coverage) @symbolic_vm.laser_hook("execute_state") def execute_state_hook(global_state: GlobalState): self._update_instruction_coverage_data(global_state) self._update_branch_coverage_data(global_state) self.state_counter += 1 if self.state_counter == BATCH_OF_STATES: self._record_coverage() self.state_counter = 0 @symbolic_vm.laser_hook("stop_sym_trans") def execute_stop_sym_trans_hook(): self.tx_id += 1 # The following is useful for debugging # @symbolic_vm.laser_hook("stop_sym_exec") # def execute_stop_sym_exec_hook(): # self.coverage.output("coverage_data.json") # self.instruction_coverage_info.output("instruction_discovery_data.json") def _update_instruction_coverage_data(self, global_state: GlobalState): """Records instruction coverage""" code = global_state.environment.code.bytecode if code not in self.instruction_coverage_data.keys(): number_of_instructions = len(global_state.environment.code.instruction_list) self.instruction_coverage_data[code] = (number_of_instructions, {}) current_instr = global_state.get_current_instruction()["address"] if self.instruction_coverage_info.is_covered(code, current_instr) is False: self.instruction_coverage_info.add_data( code, current_instr, time.time_ns() - self.start_time ) self.instruction_coverage_data[code][1][current_instr] = True def _update_branch_coverage_data(self, global_state: GlobalState): """Records branch coverage""" code = global_state.environment.code.bytecode if code not in self.branch_possibilities: self.branch_possibilities[code] = {} if global_state.get_current_instruction()["opcode"] != "JUMPI": return addr = global_state.get_current_instruction()["address"] jump_addr = global_state.mstate.stack[-1] if jump_addr.symbolic: log.debug("Encountered a symbolic jump, ignoring it for branch coverage") return self.branch_possibilities[code][addr] = [addr + 1, jump_addr.value] def _record_coverage(self): for code, code_cov in self.instruction_coverage_data.items(): total_branches = 0 branches_covered = 0 for jumps, branches in self.branch_possibilities[code].items(): for branch in branches: total_branches += 1 branches_covered += branch in code_cov[1] self.coverage.add_data( code=code, instructions_covered=len(code_cov[1]), total_instructions=code_cov[0], branches_covered=branches_covered, tx_id=self.tx_id, total_branches=total_branches, state_counter=self.state_counter, time_elapsed=time.time_ns() - self.start_time, ) ================================================ FILE: mythril/laser/plugin/plugins/dependency_pruner.py ================================================ import logging from typing import Dict, List, Set, cast from mythril.analysis import solver from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, ) from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin from mythril.laser.plugin.plugins.plugin_annotations import ( DependencyAnnotation, WSDependencyAnnotation, ) from mythril.laser.plugin.signals import PluginSkipState log = logging.getLogger(__name__) def get_dependency_annotation(state: GlobalState) -> DependencyAnnotation: """Returns a dependency annotation :param state: A global state object """ annotations = cast( List[DependencyAnnotation], list(state.get_annotations(DependencyAnnotation)) ) if len(annotations) == 0: """FIXME: Hack for carrying over state annotations from the STOP and RETURN states of the previous states. The states are pushed on a stack in the world state annotation and popped off the stack in the subsequent iteration. This might break if any other strategy than bfs is used (?). """ try: world_state_annotation = get_ws_dependency_annotation(state) annotation = world_state_annotation.annotations_stack.pop() except IndexError: annotation = DependencyAnnotation() state.annotate(annotation) else: annotation = annotations[0] return annotation def get_ws_dependency_annotation(state: GlobalState) -> WSDependencyAnnotation: """Returns the world state annotation :param state: A global state object """ annotations = cast( List[WSDependencyAnnotation], list(state.world_state.get_annotations(WSDependencyAnnotation)), ) if len(annotations) == 0: annotation = WSDependencyAnnotation() state.world_state.annotate(annotation) else: annotation = annotations[0] return annotation class DependencyPrunerBuilder(PluginBuilder): name = "dependency-pruner" def __call__(self, *args, **kwargs): return DependencyPruner() class DependencyPruner(LaserPlugin): """Dependency Pruner Plugin For every basic block, this plugin keeps a list of storage locations that are accessed (read) in the execution path containing that block. This map is built up over the whole symbolic execution run. After the initial build up of the map in the first transaction, blocks are executed only if any of the storage locations written to in the previous transaction can have an effect on that block or any of its successors. """ def __init__(self): """Creates DependencyPruner""" self._reset() def _reset(self): self.iteration = 0 self.calls_on_path: Dict[int, bool] = {} self.sloads_on_path: Dict[int, List[object]] = {} self.sstores_on_path: Dict[int, List[object]] = {} self.storage_accessed_global: Set = set() def update_sloads(self, path: List[int], target_location: object) -> None: """Update the dependency map for the block offsets on the given path. :param path :param target_location """ for address in path: if address in self.sloads_on_path: if target_location not in self.sloads_on_path[address]: self.sloads_on_path[address].append(target_location) else: self.sloads_on_path[address] = [target_location] def update_sstores(self, path: List[int], target_location: object) -> None: """Update the dependency map for the block offsets on the given path. :param path :param target_location """ for address in path: if address in self.sstores_on_path: if target_location not in self.sstores_on_path[address]: self.sstores_on_path[address].append(target_location) else: self.sstores_on_path[address] = [target_location] def update_calls(self, path: List[int]) -> None: """Update the dependency map for the block offsets on the given path. :param path :param target_location """ for address in path: if address in self.sstores_on_path: self.calls_on_path[address] = True def wanna_execute(self, address: int, annotation: DependencyAnnotation) -> bool: """Decide whether the basic block starting at 'address' should be executed. :param address :param storage_write_cache """ storage_write_cache = annotation.get_storage_write_cache(self.iteration - 1) if address in self.calls_on_path: return True # Skip "pure" paths that don't have any dependencies. if address not in self.sloads_on_path: return False # Execute the path if there are state modifications along it that *could* be relevant if address in self.storage_accessed_global: for location in self.sstores_on_path: try: solver.get_model((location == address,)) return True except UnsatError: continue dependencies = self.sloads_on_path[address] # Execute the path if there's any dependency on state modified in the previous transaction for location in storage_write_cache: for dependency in dependencies: # Is there a known read operation along this path that matches a write in the previous transaction? try: solver.get_model((location == dependency,)) return True except UnsatError: continue # Has the *currently executed* path been influenced by a write operation in the previous transaction? for dependency in annotation.storage_loaded: try: solver.get_model((location == dependency,)) return True except UnsatError: continue return False def initialize(self, symbolic_vm: LaserEVM) -> None: """Initializes the DependencyPruner :param symbolic_vm """ self._reset() @symbolic_vm.laser_hook("start_sym_trans") def start_sym_trans_hook(): self.iteration += 1 @symbolic_vm.post_hook("JUMP") def jump_hook(state: GlobalState): try: address = state.get_current_instruction()["address"] except IndexError: raise PluginSkipState annotation = get_dependency_annotation(state) annotation.path.append(address) _check_basic_block(address, annotation) @symbolic_vm.post_hook("JUMPI") def jumpi_hook(state: GlobalState): try: address = state.get_current_instruction()["address"] except IndexError: raise PluginSkipState annotation = get_dependency_annotation(state) annotation.path.append(address) _check_basic_block(address, annotation) @symbolic_vm.pre_hook("SSTORE") def sstore_hook(state: GlobalState): annotation = get_dependency_annotation(state) location = state.mstate.stack[-1] self.update_sstores(annotation.path, location) annotation.extend_storage_write_cache(self.iteration, location) @symbolic_vm.pre_hook("SLOAD") def sload_hook(state: GlobalState): annotation = get_dependency_annotation(state) location = state.mstate.stack[-1] if location not in annotation.storage_loaded: annotation.storage_loaded.add(location) # We backwards-annotate the path here as sometimes execution never reaches a stop or return # (and this may change in a future transaction). self.update_sloads(annotation.path, location) self.storage_accessed_global.add(location) @symbolic_vm.pre_hook("CALL") def call_hook(state: GlobalState): annotation = get_dependency_annotation(state) self.update_calls(annotation.path) annotation.has_call = True @symbolic_vm.pre_hook("STATICCALL") def staticcall_hook(state: GlobalState): annotation = get_dependency_annotation(state) self.update_calls(annotation.path) annotation.has_call = True @symbolic_vm.pre_hook("STOP") def stop_hook(state: GlobalState): _transaction_end(state) @symbolic_vm.pre_hook("RETURN") def return_hook(state: GlobalState): _transaction_end(state) def _transaction_end(state: GlobalState) -> None: """When a stop or return is reached, the storage locations read along the path are entered into the dependency map for all nodes encountered in this path. :param state: """ annotation = get_dependency_annotation(state) for index in annotation.storage_loaded: self.update_sloads(annotation.path, index) for index in annotation.storage_written: self.update_sstores(annotation.path, index) if annotation.has_call: self.update_calls(annotation.path) def _check_basic_block(address: int, annotation: DependencyAnnotation): """This method is where the actual pruning happens. :param address: Start address (bytecode offset) of the block :param annotation: """ # Don't skip any blocks in the contract creation transaction if self.iteration < 2: return # Don't skip newly discovered blocks if address not in annotation.blocks_seen: annotation.blocks_seen.add(address) return if self.wanna_execute(address, annotation): return else: log.debug( "Skipping state: Storage slots {} not read in block at address {}, function".format( annotation.get_storage_write_cache(self.iteration - 1), address ) ) raise PluginSkipState @symbolic_vm.laser_hook("add_world_state") def world_state_filter_hook(state: GlobalState): if isinstance(state.current_transaction, ContractCreationTransaction): # Reset iteration variable self.iteration = 0 return world_state_annotation = get_ws_dependency_annotation(state) annotation = get_dependency_annotation(state) # Reset the state annotation except for storage written which is carried on to # the next transaction annotation.path = [0] annotation.storage_loaded = set() world_state_annotation.annotations_stack.append(annotation) ================================================ FILE: mythril/laser/plugin/plugins/instruction_profiler.py ================================================ import logging from collections import namedtuple from datetime import datetime from typing import Dict, List, Tuple from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin # Type annotations: # start_time: datetime # end_time: datetime _InstrExecRecord = namedtuple("_InstrExecRecord", ["start_time", "end_time"]) # Type annotations: # total_time: float # total_nr: float # min_time: float # max_time: float _InstrExecStatistic = namedtuple( "_InstrExecStatistic", ["total_time", "total_nr", "min_time", "max_time"] ) # Map the instruction opcode to its records if all execution times _InstrExecRecords = Dict[str, List[_InstrExecRecord]] # Map the instruction opcode to the statistic of its execution times _InstrExecStatistics = Dict[str, _InstrExecStatistic] log = logging.getLogger(__name__) class InstructionProfilerBuilder(PluginBuilder): name = "instruction-profiler" def __call__(self, *args, **kwargs): return InstructionProfiler() class InstructionProfiler(LaserPlugin): """Performance profile for the execution of each instruction.""" def __init__(self): self._reset() def _reset(self): self.records = dict() self.start_time = None def initialize(self, symbolic_vm: LaserEVM) -> None: @symbolic_vm.instr_hook("pre", None) def get_start_time(op_code: str): def start_time_wrapper(global_state: GlobalState): self.start_time = datetime.now() return start_time_wrapper @symbolic_vm.instr_hook("post", None) def record(op_code: str): def record_opcode(global_state: GlobalState): end_time = datetime.now() try: self.records[op_code].append( _InstrExecRecord(self.start_time, end_time) ) except KeyError: self.records[op_code] = [ _InstrExecRecord(self.start_time, end_time) ] return record_opcode @symbolic_vm.laser_hook("stop_sym_exec") def print_stats(): total, stats = self._make_stats() s = "Total: {} s\n".format(total) for op in sorted(stats): stat = stats[op] s += "[{:12s}] {:>8.4f} %, nr {:>6}, total {:>8.4f} s, avg {:>8.4f} s, min {:>8.4f} s, max {:>8.4f} s\n".format( op, stat.total_time * 100 / total, stat.total_nr, stat.total_time, stat.total_time / stat.total_nr, stat.min_time, stat.max_time, ) log.info(s) def _make_stats(self) -> Tuple[float, _InstrExecStatistics]: periods = { op: list( map(lambda r: r.end_time.timestamp() - r.start_time.timestamp(), rs) ) for op, rs in self.records.items() } stats = dict() total_time = 0 for _, (op, times) in enumerate(periods.items()): stat = _InstrExecStatistic( total_time=sum(times), total_nr=len(times), min_time=min(times), max_time=max(times), ) total_time += stat.total_time stats[op] = stat return total_time, stats ================================================ FILE: mythril/laser/plugin/plugins/mutation_pruner.py ================================================ from mythril.analysis import solver from mythril.exceptions import UnsatError from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.transaction.transaction_models import ( ContractCreationTransaction, ) from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin from mythril.laser.plugin.plugins.plugin_annotations import MutationAnnotation from mythril.laser.plugin.signals import PluginSkipWorldState from mythril.laser.smt import UGT, symbol_factory class MutationPrunerBuilder(PluginBuilder): name = "mutation-pruner" def __call__(self, *args, **kwargs): return MutationPruner() class MutationPruner(LaserPlugin): """Mutation pruner plugin Let S be a world state from which T is a symbolic transaction, and S' is the resulting world state. In a situation where T does not execute any mutating instructions we can safely abandon further analysis on top of state S'. This is for the reason that we already performed analysis on S, which is equivalent. This optimization inhibits path explosion caused by "clean" behaviour The basic operation of this plugin is as follows: - Hook all mutating operations and introduce a MutationAnnotation to the global state on execution of the hook - Hook the svm EndTransaction on execution filter the states that do not have a mutation annotation """ def initialize(self, symbolic_vm: LaserEVM): """Initializes the mutation pruner Introduces hooks for SSTORE operations :param symbolic_vm: :return: """ @symbolic_vm.pre_hook("SSTORE") def sstore_mutator_hook(global_state: GlobalState): global_state.annotate(MutationAnnotation()) """FIXME: Check for changes in world_state.balances instead of adding MutationAnnotation for all calls. Requires world_state.starting_balances to be initialized at every tx start *after* call value has been added. """ @symbolic_vm.pre_hook("CALL") def call_mutator_hook(global_state: GlobalState): global_state.annotate(MutationAnnotation()) @symbolic_vm.pre_hook("STATICCALL") def staticcall_mutator_hook(global_state: GlobalState): global_state.annotate(MutationAnnotation()) @symbolic_vm.laser_hook("add_world_state") def world_state_filter_hook(global_state: GlobalState): if isinstance( global_state.current_transaction, ContractCreationTransaction ): return if isinstance(global_state.environment.callvalue, int): callvalue = symbol_factory.BitVecVal( global_state.environment.callvalue, 256 ) else: callvalue = global_state.environment.callvalue try: constraints = global_state.world_state.constraints + [ UGT(callvalue, symbol_factory.BitVecVal(0, 256)) ] solver.get_model(constraints) return except UnsatError: # callvalue is constrained to 0, therefore there is no balance based world state mutation pass if len(list(global_state.get_annotations(MutationAnnotation))) == 0: raise PluginSkipWorldState ================================================ FILE: mythril/laser/plugin/plugins/plugin_annotations.py ================================================ import logging from copy import copy from typing import Dict, List, Set from mythril.laser.ethereum.state.annotation import ( MergeableStateAnnotation, StateAnnotation, ) log = logging.getLogger(__name__) class MutationAnnotation(StateAnnotation): """Mutation Annotation This is the annotation used by the MutationPruner plugin to record mutations """ def __init__(self): pass @property def persist_over_calls(self) -> bool: return True class DependencyAnnotation(MergeableStateAnnotation): """Dependency Annotation This annotation tracks read and write access to the state during each transaction. """ def __init__(self): self.storage_loaded: Set = set() self.storage_written: Dict[int, Set] = {} self.has_call: bool = False self.path: List = [0] self.blocks_seen: Set[int] = set() def __copy__(self): result = DependencyAnnotation() result.storage_loaded = copy(self.storage_loaded) result.storage_written = copy(self.storage_written) result.has_call = self.has_call result.path = copy(self.path) result.blocks_seen = copy(self.blocks_seen) return result def get_storage_write_cache(self, iteration: int): return self.storage_written.get(iteration, set()) def extend_storage_write_cache(self, iteration: int, value: object): if iteration not in self.storage_written: self.storage_written[iteration] = set() self.storage_written[iteration].add(value) def check_merge_annotation(self, other: "DependencyAnnotation"): if not isinstance(other, DependencyAnnotation): raise TypeError("Expected an instance of DependencyAnnotation") return self.has_call == other.has_call and self.path == other.path def merge_annotation(self, other: "DependencyAnnotation"): merged_annotation = DependencyAnnotation() merged_annotation.blocks_seen = self.blocks_seen.union(other.blocks_seen) merged_annotation.has_call = self.has_call merged_annotation.path = copy(self.path) merged_annotation.storage_loaded = self.storage_loaded.union( other.storage_loaded ) keys = set( list(other.storage_written.keys()) + list(self.storage_written.keys()) ) for key in keys: other_set = other.storage_written.get(key, set()) merged_annotation.storage_written[key] = self.storage_written.get( key, set() ).union(other_set) return merged_annotation class WSDependencyAnnotation(MergeableStateAnnotation): """Dependency Annotation for World state This world state annotation maintains a stack of state annotations. It is used to transfer individual state annotations from one transaction to the next. """ def __init__(self): self.annotations_stack: List[DependencyAnnotation] = [] def __copy__(self): result = WSDependencyAnnotation() result.annotations_stack = copy(self.annotations_stack) return result def check_merge_annotation(self, annotation: "WSDependencyAnnotation") -> bool: if len(self.annotations_stack) != len(annotation.annotations_stack): # We can only merge worldstate annotations that have seen an equal amount of transactions # since the beginning of symbolic execution return False for a1, a2 in zip(self.annotations_stack, annotation.annotations_stack): if a1 == a2: continue if ( isinstance(a1, MergeableStateAnnotation) and isinstance(a2, MergeableStateAnnotation) and a1.check_merge_annotation(a2) is True ): continue log.debug("Aborting merge between annotations {} and {}".format(a1, a2)) return False return True def merge_annotation( self, annotation: "WSDependencyAnnotation" ) -> "WSDependencyAnnotation": merged_annotation = WSDependencyAnnotation() for a1, a2 in zip(self.annotations_stack, annotation.annotations_stack): if a1 == a2: merged_annotation.annotations_stack.append(copy(a1)) merged_annotation.annotations_stack.append(a1.merge_annotation(a2)) return merged_annotation ================================================ FILE: mythril/laser/plugin/plugins/state_merge/__init__.py ================================================ from .state_merge_plugin import StateMergePluginBuilder ================================================ FILE: mythril/laser/plugin/plugins/state_merge/check_mergeability.py ================================================ import logging from mythril.laser.ethereum.cfg import Node from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.smt import Not CONSTRAINT_DIFFERENCE_LIMIT = 15 log = logging.getLogger(__name__) def check_node_merge_condition(node1: Node, node2: Node): """ Checks whether two nodes are merge-able :param node1: The node to be merged :param node2: The other node to be merged :return: Boolean, True if we can merge """ return all( [ node1.function_name == node2.function_name, node1.contract_name == node2.contract_name, node1.start_addr == node2.start_addr, ] ) def check_account_merge_condition(account1: Account, account2: Account): """ Checks whether we can merge accounts """ return all( [ account1.nonce == account2.nonce, account1.deleted == account2.deleted, account1.code.bytecode == account2.code.bytecode, ] ) def check_ws_merge_condition(state1: WorldState, state2: WorldState): """ Checks whether we can merge these states """ if state1.node and not check_node_merge_condition(state1.node, state2.node): return False for address, account in state2.accounts.items(): if ( address in state1._accounts and check_account_merge_condition(state1._accounts[address], account) is False ): return False if not _check_merge_annotations(state1, state2): return False return True def _check_merge_annotations(state1: WorldState, state2: WorldState): """ Checks whether two annotations can be merged :param state: :return: """ if len(state2.annotations) != len(state1.annotations): return False if _check_constraint_merge(state1.constraints, state2.constraints) is False: return False for v1, v2 in zip(state2.annotations, state1.annotations): if type(v1) != type(v2): return False try: if v1.check_merge_annotation(v2) is False: # type: ignore return False except AttributeError: log.error( f"check_merge_annotation() method doesn't exist " f"for the annotation {type(v1)}. Aborting merge for the state" ) return False return True def _check_constraint_merge( constraints1: Constraints, constraints2: Constraints ) -> bool: """ We are merging the states which have a no more than CONSTRAINT_DIFFERENCE_LIMIT different constraints. This helps in merging states which are not too different """ dict1 = {c: True for c in constraints1} dict2 = {c: True for c in constraints2} c1, c2 = 0, 0 for key in dict1: if key not in dict2 and Not(key) not in dict2: c1 += 1 for key in dict2: if key not in dict1 and Not(key) not in dict1: c2 += 1 if c1 + c2 > CONSTRAINT_DIFFERENCE_LIMIT: return False return True ================================================ FILE: mythril/laser/plugin/plugins/state_merge/merge_states.py ================================================ import logging from typing import Tuple, cast from mythril.laser.ethereum.cfg import Node from mythril.laser.ethereum.state.account import Account, Storage from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.smt import And, Array, If, Not, Or, symbol_factory from mythril.laser.smt import SMTBool as Bool log = logging.getLogger(__name__) def merge_states(state1: WorldState, state2: WorldState): """ Merge state2 into state1 :param state1: The state to be merged into :param state2: The state which is merged into state1 :return: """ # Merge constraints state1.constraints, condition1, _ = _merge_constraints( state1.constraints, state2.constraints ) # Merge balances state1.balances = cast(Array, If(condition1, state1.balances, state2.balances)) state1.starting_balances = cast( Array, If(condition1, state1.starting_balances, state2.starting_balances) ) # Merge accounts for address, account in state2.accounts.items(): if address not in state1._accounts: state1.put_account(account) else: merge_accounts( state1._accounts[address], account, condition1, state1.balances ) # Merge annotations _merge_annotations(state1, state2) # Merge Node merge_nodes(state1.node, state2.node, state1.constraints) def merge_nodes(node1: Node, node2: Node, constraints: Constraints): """ Merges node2 into node1 :param node1: The node to be merged :param node2: The other node to be merged :param constraints: The merged constraints :return: """ node1.states += node2.states node1.uid = hash(node1) node1.flags |= node2.flags node1.constraints = constraints def merge_accounts( account1: Account, account2: Account, path_condition: Bool, merged_balance: Array, ): """ Merges account2 into account1 :param account1: The account to merge with :param account2: The second account to merge :param path_condition: The constraint for this account :param merged_balance: The merged balance :return: """ if ( account1.nonce != account2.nonce or account1.deleted != account2.deleted or account1.code.bytecode != account2.code.bytecode ): raise ValueError("Un-Mergeable accounts are given to be merged") account1._balances = merged_balance merge_storage(account1.storage, account2.storage, path_condition) def merge_storage(storage1: Storage, storage2: Storage, path_condition: Bool): """ Merge storage2 into storage1 :param storage1: To storage to merge into :param storage2: To storage to merge with :param path_condition: The constraint for this storage to be executed :return: """ storage1._standard_storage = If( path_condition, storage1._standard_storage, storage2._standard_storage ) storage1.storage_keys_loaded = storage1.storage_keys_loaded.union( storage2.storage_keys_loaded ) for key, value in storage2.printable_storage.items(): if key in storage1.printable_storage: storage1.printable_storage[key] = If( path_condition, storage1.printable_storage[key], value ) else: storage1.printable_storage[key] = If(path_condition, 0, value) def _merge_annotations(state1: "WorldState", state2: "WorldState"): """ Merges the annotations of the two states into state1 :param state1: :param state2: :return: """ for v1, v2 in zip(state1.annotations, state2.annotations): try: v1.merge_annotation(v2) # type: ignore except AttributeError: log.error( f"merge_annotation() method doesn't exist for the annotation {type(v1)}. " "Aborting merge for the state" ) return False def _merge_constraints( constraints1: Constraints, constraints2: Constraints ) -> Tuple[Constraints, Bool, Bool]: """ Merges constraints :param constraints1: Constraint2 of state1 :param constraints2: Constraints of state2 :return: A Tuple of merged constraints, conjunction of constraints in state 1 not in state 2, conjunction of constraints in state2 not in state1 """ dict1 = {c: True for c in constraints1} dict2 = {c: True for c in constraints2} c1, c2 = symbol_factory.Bool(True), symbol_factory.Bool(True) new_constraint1, new_constraint2 = ( symbol_factory.Bool(True), symbol_factory.Bool(True), ) same_constraints = Constraints() for key in dict1: if key not in dict2: c1 = And(c1, key) if Not(key) not in dict2: new_constraint1 = And(new_constraint1, key) else: same_constraints.append(key) for key in dict2: if key not in dict1: c2 = And(c2, key) if Not(key) not in dict1: new_constraint2 = And(new_constraint2, key) else: same_constraints.append(key) merge_constraints = same_constraints + [Or(new_constraint1, new_constraint2)] return merge_constraints, c1, c2 ================================================ FILE: mythril/laser/plugin/plugins/state_merge/state_merge_plugin.py ================================================ import logging from copy import copy from typing import List, Set from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.interface import LaserPlugin from .check_mergeability import check_ws_merge_condition from .merge_states import merge_states log = logging.getLogger(__name__) class MergeAnnotation(StateAnnotation): pass class StateMergePluginBuilder(LaserPlugin): plugin_default_enabled = True enabled = True author = "MythX Development Team" name = "MythX State Merge" plugin_license = "All rights reserved." plugin_type = "Laser Plugin" plugin_version = "0.0.1 " plugin_description = "This plugin merges states after the end of a transaction" def __call__(self, *args, **kwargs): return StateMergePlugin() class StateMergePlugin(LaserPlugin): """ Tries to merge states based on their similarity. Currently it only tries to merge if everything is same except constraints and storage. And there is some tolerance level to the constraints. A state can be merged only once --> avoids segfaults + better performance """ def initialize(self, symbolic_vm: LaserEVM): """Initializes the State merging plugin Introduces hooks for stop_sym_trans function :param symbolic_vm: :return: """ @symbolic_vm.laser_hook("stop_sym_trans") def execute_stop_sym_trans_hook(): open_states = symbolic_vm.open_states if len(open_states) <= 1: return num_old_states = len(open_states) new_states = [] # type: List[WorldState] old_size = len(open_states) old_states = copy(open_states) while old_size != len(new_states): old_size = len(new_states) new_states = [] merged_set = set() # type: Set[int] for i, state in enumerate(old_states): if i in merged_set: continue if len(list(state.get_annotations(MergeAnnotation))) > 0: new_states.append(state) continue new_states.append(self._look_for_merges(i, old_states, merged_set)) old_states = copy(new_states) log.info(f"States reduced from {num_old_states} to {len(new_states)}") symbolic_vm.open_states = new_states def _look_for_merges( self, offset: int, states: List[WorldState], merged_set: Set[int], ) -> WorldState: """ Tries to merge states[offset] with any of the states in states[offset+1:] :param offset: The offset of state :param states: The List of states :param merged_set: Set indicating which states are excluded from merging :return: Returns a state """ state = states[offset] for j in range(offset + 1, len(states)): if j in merged_set or not check_ws_merge_condition(state, states[j]): continue merge_states(state, states[j]) merged_set.add(j) state.annotations.append(MergeAnnotation()) return state return state ================================================ FILE: mythril/laser/plugin/plugins/summary/__init__.py ================================================ from .core import SymbolicSummaryPluginBuilder ================================================ FILE: mythril/laser/plugin/plugins/summary/annotations.py ================================================ from copy import deepcopy from typing import List, Tuple from mythril.laser.ethereum.state.annotation import StateAnnotation from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.smt import BaseArray from mythril.laser.smt import SMTBool as Bool class SummaryTrackingAnnotation(StateAnnotation): """SummaryTrackingAnnotation This annotation is used by the symbolic summary plugin to keep track of data related to a summary that will be computed during the future exploration of the annotated world state. """ def __init__( self, entry: GlobalState, storage_pairs: List[Tuple[BaseArray, BaseArray]], storage_constraints: List[Bool], environment_pair: Tuple[Environment, Environment], balance_pair: Tuple[BaseArray, BaseArray], code: str, ): self.entry = entry self.trace = [] self.storage_pairs = storage_pairs self.storage_constraints = storage_constraints self.environment_pair = environment_pair self.balance_pair = balance_pair self.code = code def __copy__(self): annotation = SummaryTrackingAnnotation( entry=self.entry, storage_pairs=deepcopy(self.storage_pairs), storage_constraints=deepcopy(self.storage_constraints), environment_pair=deepcopy(self.environment_pair), balance_pair=deepcopy(self.balance_pair), code=self.code, ) annotation.trace = self.trace return annotation ================================================ FILE: mythril/laser/plugin/plugins/summary/core.py ================================================ import logging from copy import copy, deepcopy from typing import List, Optional, Set, Tuple import z3 from mythril.analysis.issue_annotation import IssueAnnotation from mythril.analysis.potential_issues import check_potential_issues from mythril.analysis.solver import get_transaction_sequence from mythril.exceptions import UnsatError from mythril.laser.ethereum.function_managers import ( keccak_function_manager, ) from mythril.laser.ethereum.state.calldata import SymbolicCalldata from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.transaction.transaction_models import ( BaseTransaction, ContractCreationTransaction, ) from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin from mythril.laser.plugin.plugins.plugin_annotations import MutationAnnotation from mythril.laser.plugin.signals import PluginSkipState from mythril.laser.smt import ( Array, Expression, Solver, symbol_factory, ) from mythril.laser.smt import ( SMTBool as Bool, ) from mythril.support.support_args import args from mythril.support.support_utils import get_code_hash from .annotations import SummaryTrackingAnnotation from .summary import SymbolicSummary, substitute_exprs log = logging.getLogger(__name__) class SymbolicSummaryPluginBuilder(PluginBuilder): name = "Symbolic Summaries" def __call__(self, *args, **kwargs): return SymbolicSummaryPlugin() class SymbolicSummaryPlugin(LaserPlugin): def __init__(self): self.summaries = [] args.use_issue_annotations = True self.issue_cache: Set[Tuple[str, str, int]] = set() self.init_save_states = [] self.save_init_balance = None def initialize(self, symbolic_vm: LaserEVM): """Initializes the symbolic summary generating plugin Introduces hooks for each instruction :param symbolic_vm: the symbolic virtual machine to initialize this plugin for """ """ @symbolic_vm.laser_hook("start_execute_transactions"): def start_exec_txs_hook(): log.info(f"Started executing transactions") symbolic_vm.executed_transactions = True """ @symbolic_vm.laser_hook("stop_sym_exec") def stop_sym_exec_hook(): # Print results log.info(f"Generated {len(self.summaries)} summaries") @symbolic_vm.laser_hook("execute_state") def execute_start_sym_trans_hook(global_state: GlobalState): if global_state.mstate.pc == 0: if len(global_state.world_state.transaction_sequence) == 2: self.init_save_states.append(deepcopy(global_state)) self._apply_summaries(laser_evm=symbolic_vm, global_state=global_state) self.save_init_balance = deepcopy(global_state.world_state.balances) self._summary_entry(global_state) @symbolic_vm.post_hook("JUMPI") @symbolic_vm.post_hook("JUMP") def call_mutator_hook(global_state: GlobalState): for annotation in global_state.get_annotations(SummaryTrackingAnnotation): annotation.trace.append(global_state.instruction["address"]) @symbolic_vm.laser_hook("transaction_end") def transaction_end_hook( global_state: GlobalState, transaction: BaseTransaction, return_global_state: Optional[GlobalState], revert: bool = True, ): if return_global_state is not None: return if ( not isinstance(transaction, ContractCreationTransaction) or transaction.return_data ) and (not revert or list(global_state.get_annotations(IssueAnnotation))): check_potential_issues(global_state) self._summary_exit(global_state, transaction, revert) def _summary_entry(self, global_state: GlobalState): """Handles logic for when the analysis reaches an entry point of a to-be recorded symbolic summary :param global_state: The state at the entry of the symbolic summary """ summary_constraints = [] storage_pairs = [] # Rewrite storage for index, account in global_state.world_state.accounts.items(): actual_storage = deepcopy(account.storage._standard_storage) symbolic_storage = Array(f"{index}_symbolic_storage", 256, 256) account.storage._standard_storage = symbolic_storage storage_pairs.append((actual_storage, symbolic_storage)) account.storage.keys_get = set() account.storage.keys_set = set() # Rewrite balances previous_balances, summary_balances = ( global_state.world_state.balances, Array("summary_balance", 256, 256), ) global_state.world_state.balances = summary_balances balances_pair = (previous_balances, summary_balances) # Rewrite environment previous_environment = global_state.environment summary_environment = self._create_summary_environment(previous_environment) environment_pair = (previous_environment, summary_environment) # Construct the summary tracking annotation summary_annotation = SummaryTrackingAnnotation( global_state, storage_pairs, summary_constraints, environment_pair, balances_pair, global_state.environment.code.bytecode, ) # Introduce annotation and constraints to the global state for constraint in summary_constraints: global_state.world_state.constraints.append(constraint) global_state.annotate(summary_annotation) def _create_summary_environment(self, base_environment: Environment) -> Environment: return Environment( # No need to rewrite, accounts are handled in other procedure active_account=base_environment.active_account, # Need to rewrite, different symbol for each transaction sender=symbol_factory.BitVecSym("summary_sender", 256), # Need to rewrite, different symbol for each transaction origin=symbol_factory.BitVecSym("summary_origin", 256), # Need to rewrite, different symbol for each transaction calldata=SymbolicCalldata("summary"), # Need to rewrite, different symbol for each transaction gasprice=symbol_factory.BitVecSym("summary_origin", 256), # Need to rewrite, different symbol for each transaction callvalue=symbol_factory.BitVecSym("summary_callvalue", 256), # No need to rewrite, this can be inherited from the original environment static=base_environment.static, # No need to rewrite, this can be inherited from the original environment code=base_environment.code, basefee=base_environment.basefee, ) @classmethod def _restore_environment( cls, summary_tracking_annotation: SummaryTrackingAnnotation, global_state: GlobalState, ): global_state.environment = summary_tracking_annotation.environment_pair[0] original, summary = summary_tracking_annotation.environment_pair # Rewrite sender cls._rewrite(global_state, summary.sender, original.sender) # Rewrite origin cls._rewrite(global_state, summary.origin, original.origin) # Rewrite calldata cls._rewrite( global_state, summary.calldata.calldatasize, original.calldata.calldatasize ) cls._rewrite( global_state, summary.calldata._calldata, original.calldata._calldata ) # Rewrite gasprice cls._rewrite(global_state, summary.gasprice, original.gasprice) # Rewrite callvalue cls._rewrite(global_state, summary.callvalue, original.callvalue) def check_for_issues(self, global_state): for summary in self.summaries: for issue in summary.issues: self._check_issue(global_state, issue) def storage_dependent(self, summary, global_state: GlobalState) -> bool: """ Checks if storage of summary depends on global state's previous storage stores """ total_key_set = set() for index in global_state.accounts: total_key_set = total_key_set.union( global_state.accounts[index].storage.keys_set ) if len(global_state.world_state.transaction_sequence) <= 3: return True for index, storage_get in summary.get_map.items(): for key in storage_get: if key.symbolic is False: if key in global_state.accounts[index].storage.keys_set: return True else: for state_key in global_state.accounts[index].storage.keys_set: s = Solver() s.set_timeout(3000) s.add(state_key == key) s.add(keccak_function_manager.create_conditions()) sat = s.check() == z3.sat if sat: return True return False def _apply_summaries(self, laser_evm: LaserEVM, global_state: GlobalState): """ Applies summaries on the EVM """ pc = global_state.instruction["address"] self.check_for_issues(global_state) summaries = [ summary for summary in self.summaries if summary.entry == pc and summary.code == global_state.environment.code.bytecode and not summary.revert and summary.storage_effect ] for summary in summaries: resulting_state = summary.apply_summary(global_state) if resulting_state: laser_evm._add_world_state(resulting_state[0]) if summaries: raise PluginSkipState def issue_in_cache( self, global_state: GlobalState, issue_annotation: IssueAnnotation ) -> bool: address = ( issue_annotation.issue.source_location or issue_annotation.issue.address ) return ( issue_annotation.detector.swc_id, address, get_code_hash(global_state.environment.code.bytecode), ) in self.issue_cache def _check_issue( self, global_state: GlobalState, issue_annotation: IssueAnnotation ): if self.issue_in_cache(global_state, issue_annotation): return success = 0 tx_seq = [] for constraint in issue_annotation.conditions: condition = self._translate_condition( global_state, [constraint, deepcopy(keccak_function_manager.create_conditions())], ) condition = [ expr for expr in global_state.world_state.constraints.as_list + condition ] try: tx_seq = get_transaction_sequence(global_state, Constraints(condition)) success += 1 except UnsatError: break if success == len(issue_annotation.conditions): log.info("Found an issue") new_issue = copy(issue_annotation.issue) new_issue.transaction_sequence = tx_seq issue_annotation.detector.issues += [new_issue] address = ( issue_annotation.issue.source_location or issue_annotation.issue.address ) self.issue_cache.add( ( issue_annotation.detector.swc_id, address, get_code_hash(global_state.environment.code.bytecode), ) ) def _translate_condition(self, global_state: GlobalState, condition: List[Bool]): condition = deepcopy(condition) for account_id, account in global_state.world_state.accounts.items(): for expression in condition: substitute_exprs(expression, account_id, account, global_state) return condition def _summary_exit( self, global_state: GlobalState, transaction: BaseTransaction, revert: bool ): """Handles logic for when the analysis reaches the summary exit This function populates self.summaries with the discovered symbolic summaries :param global_state: The state at the exit of the discovered symbolic summary """ summary_annotation = self._get_and_remove_summary_tracking_annotation( global_state ) if not summary_annotation: log.error("Missing Annotation") return self._record_symbolic_summary( global_state, summary_annotation, transaction, revert ) self._restore_previous_state(global_state, summary_annotation) @staticmethod def _get_and_remove_summary_tracking_annotation( global_state: GlobalState, ) -> Optional[SummaryTrackingAnnotation]: """Retrieves symbolic summary from the global state""" summary_annotation: List[SummaryTrackingAnnotation] = list( global_state.get_annotations(SummaryTrackingAnnotation) ) if len(summary_annotation) != 1: logging.warning( f"Unexpected number of summary tracking annotations found: {len(summary_annotation)}\nSkipping..." ) summary_annotation: SummaryTrackingAnnotation = summary_annotation[0] global_state.annotations.remove(summary_annotation) return summary_annotation def _record_symbolic_summary( self, global_state: GlobalState, tracking_annotation: SummaryTrackingAnnotation, transaction: BaseTransaction, revert, ): """Records a summary between tracking_annotation.entry and global_state""" if ( len(list(global_state.get_annotations(MutationAnnotation))) == 0 and list(global_state.get_annotations(IssueAnnotation)) == 0 ): return storage_mutations = [] return_value = transaction.return_data set_map = {} get_map = {} for index, account in global_state.world_state.accounts.items(): if account.storage._standard_storage not in [ p[1] for p in tracking_annotation.storage_pairs ]: get_map[account.address] = account.storage.keys_get set_map[account.address] = account.storage.keys_set storage_mutations.append( (index, copy(account.storage._standard_storage)) ) condition = global_state.world_state.constraints.get_all_constraints() for constraint in tracking_annotation.entry.world_state.constraints: condition.remove(constraint) annotations = list(global_state.get_annotations(IssueAnnotation)) summary = SymbolicSummary( storage_effect=deepcopy(storage_mutations), balance_effect=copy(global_state.world_state.balances), condition=deepcopy(condition), return_value=return_value, entry=tracking_annotation.entry.mstate.pc, exit=global_state.mstate.pc, trace=tracking_annotation.trace, code=tracking_annotation.code, issues=annotations, revert=revert, get_map=get_map, set_map=set_map, ) log.debug(annotations) # Calculate issues for the first transaction if len(global_state.world_state.transaction_sequence) == 2: for state in self.init_save_states: for issue in summary.issues: self._check_issue(state, issue) self.summaries.append(summary) @classmethod def _restore_previous_state( cls, global_state: GlobalState, tracking_annotation: SummaryTrackingAnnotation ): """Restores the previous persistent variables to the global state""" for og_storage, sym_storage in tracking_annotation.storage_pairs: cls._rewrite(global_state, sym_storage, og_storage) cls._rewrite( global_state, tracking_annotation.balance_pair[1], tracking_annotation.balance_pair[0], ) cls._restore_environment(tracking_annotation, global_state) @staticmethod def _rewrite(global_state: GlobalState, original: Expression, new: Expression): for account in global_state.world_state.accounts.values(): account.storage._standard_storage.substitute(original, new) global_state.world_state.balances.substitute(original, new) for constraint in global_state.world_state.constraints: constraint.substitute(original, new) ================================================ FILE: mythril/laser/plugin/plugins/summary/summary.py ================================================ import logging from copy import deepcopy import z3 from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.plugin.plugins.plugin_annotations import MutationAnnotation from mythril.laser.smt import Array, Solver, symbol_factory from mythril.support.support_args import args log = logging.getLogger(__name__) class SymbolicSummary: """Symbolic Summary A symbolic summary is an awesome construct that allows mythril to record and re-use partial analysis results """ def __init__( self, storage_effect, balance_effect, condition, return_value, entry, exit, trace, code, issues, revert, set_map=None, get_map=None, ): self.storage_effect = storage_effect self.balance_effect = balance_effect self.condition = condition self.return_value = return_value self.entry = entry self.exit = exit self.trace = trace self.code = code self.issues = issues self.revert = revert self.set_map = set_map self.get_map = get_map @property def as_csv(self, delimiter=",", sub_array_delimiter=";", tuple_delimiter=":"): condition = sub_array_delimiter.join(map(str, self.condition)) storage_effect = sub_array_delimiter.join( [f"{ap[0]}{tuple_delimiter}{ap[1]}" for ap in self.storage_effect] ) return_value = None trace = sub_array_delimiter.join(map(str, self.trace)) return ( delimiter.join( map( str, [ self.entry, condition, self.exit, storage_effect, return_value, trace, ], ) ) .replace("\n", "") .replace(" ", "") ) @property def as_dict(self): return dict( entry=self.entry, condition=list(map(str, self.condition)), exit=self.exit, storage_effect=list(map(str, self.storage_effect)), balance_effect=str(self.balance_effect), return_value=self.return_value, trace=self.trace[:], code=self.code, issues=len(self.issues), revert=self.revert, ) def apply_summary(self, global_state: GlobalState): # Copy and apply summary global_state = deepcopy(global_state) conditions = deepcopy(self.condition) for account_id, account in global_state.world_state.accounts.items(): for expression in conditions: substitute_exprs(expression, account_id, account, global_state) for account_id, effect in self.storage_effect: account = global_state.world_state.accounts[account_id] new_storage = deepcopy(effect) substitute_exprs(new_storage, account_id, account, global_state) account.storage._standard_storage = new_storage new_balances = deepcopy(self.balance_effect) new_balances.substitute( Array("summary_balance", 256, 256), global_state.world_state.balances ) global_state.world_state.balances = new_balances # Set constraints global_state.world_state.constraints += [c for c in conditions] # Check Condition solver = Solver() solver.set_timeout(args.solver_timeout) solver.add(*(global_state.world_state.constraints.as_list)) sat = solver.check() == z3.sat if not sat: return [] global_state.node.constraints = global_state.world_state.constraints global_state.world_state.node = global_state.node global_state.annotate(MutationAnnotation()) return [global_state] def substitute_exprs(expression, account_id, account, global_state): a = Array("2_calldata", 256, 8) b = Array(f"{global_state.current_transaction.id}_calldata", 256, 8) expression.substitute(a, b) a = symbol_factory.BitVecSym("2_calldatasize", 256) b = symbol_factory.BitVecSym( f"{global_state.current_transaction.id}_calldatasize", 256 ) expression.substitute(a, b) a = symbol_factory.BitVecSym("sender_2", 256) b = symbol_factory.BitVecSym(f"sender_{global_state.current_transaction.id}", 256) expression.substitute(a, b) a = symbol_factory.BitVecSym("call_value2", 256) b = symbol_factory.BitVecSym( f"call_value{global_state.current_transaction.id}", 256 ) expression.substitute(a, b) a = Array(f"{account_id}_symbolic_storage", 256, 256) b = account.storage._standard_storage expression.substitute(a, b) a = Array("summary_balance", 256, 256) b = global_state.world_state.balances expression.substitute(a, b) ================================================ FILE: mythril/laser/plugin/plugins/summary_backup/__init__.py ================================================ ================================================ FILE: mythril/laser/plugin/plugins/trace.py ================================================ from typing import List, Tuple from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.plugin.builder import PluginBuilder from mythril.laser.plugin.interface import LaserPlugin class TraceFinderBuilder(PluginBuilder): name = "trace-finder" plugin_default_enabled = True enabled = True author = "MythX Development Team" name = "MythX Trace Finder" plugin_license = "All rights reserved." plugin_type = "Laser Plugin" plugin_version = "0.0.1 " plugin_description = "This plugin merges states after the end of a transaction" def __call__(self, *args, **kwargs): return TraceFinder() class TraceFinder(LaserPlugin): def __init__(self): self._reset() def _reset(self): self.tx_trace: List[List[Tuple[int, str]]] = [] def initialize(self, symbolic_vm: LaserEVM): """Initializes Trace Finder Introduces hooks during the start of the execution and each execution state :param symbolic_vm: :return: """ self._reset() @symbolic_vm.laser_hook("start_exec") def start_sym_trans_hook(): self.tx_trace.append([]) @symbolic_vm.laser_hook("execute_state") def trace_jumpi_hook(global_state: GlobalState): self.tx_trace[-1].append( (global_state.mstate.pc, global_state.current_transaction.id) ) ================================================ FILE: mythril/laser/plugin/signals.py ================================================ class PluginSignal(Exception): """Base plugin signal These signals are used by the laser plugins to create intent for certain actions in the symbolic virtual machine """ pass class PluginSkipWorldState(PluginSignal): """Plugin to skip world state Plugins that raise this signal while the add_world_state hook is being executed will force laser to abandon that world state. """ pass class PluginSkipState(PluginSignal): """Plugin to skip world state Plugins that raise this signal while the add_world_state hook is being executed will force laser to abandon that world state. """ pass ================================================ FILE: mythril/laser/smt/__init__.py ================================================ from typing import Any, Generic, Optional, Set, TypeVar, Union import z3 from mythril.laser.smt.array import Array, BaseArray, K from mythril.laser.smt.bitvec import BitVec from mythril.laser.smt.bitvec_helper import ( UGE, UGT, ULE, ULT, BVAddNoOverflow, BVMulNoOverflow, BVSubNoUnderflow, Concat, Extract, If, LShR, SRem, Sum, UDiv, URem, ) from mythril.laser.smt.bool import And, Not, Or, is_false, is_true from mythril.laser.smt.bool import Bool as SMTBool from mythril.laser.smt.expression import Expression, simplify from mythril.laser.smt.function import Function from mythril.laser.smt.model import Model from mythril.laser.smt.solver import Optimize, Solver, SolverStatistics Annotations = Optional[Set[Any]] T = TypeVar("T", bound=Union[SMTBool, z3.BoolRef]) U = TypeVar("U", bound=Union[BitVec, z3.BitVecRef]) class SymbolFactory(Generic[T, U]): """A symbol factory provides a default interface for all the components of mythril to create symbols""" @staticmethod def Bool(value: "__builtins__.bool", annotations: Annotations = None) -> T: """ Creates a Bool with concrete value :param value: The boolean value :param annotations: The annotations to initialize the bool with :return: The freshly created Bool() """ raise NotImplementedError @staticmethod def BoolSym(name: str, annotations: Annotations = None) -> T: """ Creates a boolean symbol :param name: The name of the Bool variable :param annotations: The annotations to initialize the bool with :return: The freshly created Bool() """ raise NotImplementedError @staticmethod def BitVecVal(value: int, size: int, annotations: Annotations = None) -> U: """Creates a new bit vector with a concrete value. :param value: The concrete value to set the bit vector to :param size: The size of the bit vector :param annotations: The annotations to initialize the bit vector with :return: The freshly created bit vector """ raise NotImplementedError() @staticmethod def BitVecSym(name: str, size: int, annotations: Annotations = None) -> U: """Creates a new bit vector with a symbolic value. :param name: The name of the symbolic bit vector :param size: The size of the bit vector :param annotations: The annotations to initialize the bit vector with :return: The freshly created bit vector """ raise NotImplementedError() class _SmtSymbolFactory(SymbolFactory[SMTBool, BitVec]): """ An implementation of a SymbolFactory that creates symbols using the classes in: mythril.laser.smt """ @staticmethod def Bool(value: "__builtins__.bool", annotations: Annotations = None) -> SMTBool: """ Creates a Bool with concrete value :param value: The boolean value :param annotations: The annotations to initialize the bool with :return: The freshly created Bool() """ raw = z3.BoolVal(value) return SMTBool(raw, annotations) @staticmethod def BoolSym(name: str, annotations: Annotations = None) -> SMTBool: """ Creates a boolean symbol :param name: The name of the Bool variable :param annotations: The annotations to initialize the bool with :return: The freshly created Bool() """ raw = z3.Bool(name) return SMTBool(raw, annotations) @staticmethod def BitVecVal(value: int, size: int, annotations: Annotations = None) -> BitVec: """Creates a new bit vector with a concrete value.""" raw = z3.BitVecVal(value, size) return BitVec(raw, annotations) @staticmethod def BitVecSym(name: str, size: int, annotations: Annotations = None) -> BitVec: """Creates a new bit vector with a symbolic value.""" raw = z3.BitVec(name, size) return BitVec(raw, annotations) class _Z3SymbolFactory(SymbolFactory[z3.BoolRef, z3.BitVecRef]): """ An implementation of a SymbolFactory that directly returns z3 symbols """ @staticmethod def Bool(value: "__builtins__.bool", annotations: Annotations = None) -> z3.BoolRef: """Creates a new bit vector with a concrete value""" return z3.BoolVal(value) @staticmethod def BitVecVal( value: int, size: int, annotations: Annotations = None ) -> z3.BitVecRef: """Creates a new bit vector with a concrete value.""" return z3.BitVecVal(value, size) @staticmethod def BitVecSym( name: str, size: int, annotations: Annotations = None ) -> z3.BitVecRef: """Creates a new bit vector with a symbolic value.""" return z3.BitVec(name, size) # This is the instance that other parts of mythril should use # Type hints are not allowed here in 3.5 # symbol_factory: SymbolFactory = _SmtSymbolFactory() symbol_factory = _SmtSymbolFactory() ================================================ FILE: mythril/laser/smt/array.py ================================================ """This module contains an SMT abstraction of arrays. This includes an Array class to implement basic store and set operations, as well as as a K-array, which can be initialized with default values over a certain range. """ from typing import cast import z3 from mythril.laser.smt.bitvec import BitVec class BaseArray: """Base array type, which implements basic store and set operations.""" def __init__(self, raw): self.raw = raw def __getitem__(self, item: BitVec) -> BitVec: """Gets item from the array, item can be symbolic.""" if isinstance(item, slice): raise ValueError( "Instance of BaseArray, does not support getitem with slices" ) return BitVec(cast(z3.BitVecRef, z3.Select(self.raw, item.raw))) def __setitem__(self, key: BitVec, value: BitVec) -> None: """Sets an item in the array, key can be symbolic.""" self.raw = z3.Store(self.raw, key.raw, value.raw) def substitute(self, original_expression, new_expression): """ :param original_expression: :param new_expression: """ if self.raw is None: return original_z3 = original_expression.raw new_z3 = new_expression.raw self.raw = z3.substitute(self.raw, (original_z3, new_z3)) class Array(BaseArray): """A basic symbolic array.""" def __init__(self, name: str, domain: int, value_range: int): """Initializes a symbolic array. :param name: Name of the array :param domain: The domain for the array (10 -> all the values that a bv of size 10 could take) :param value_range: The range for the values in the array (10 -> all the values that a bv of size 10 could take) """ self.domain = z3.BitVecSort(domain) self.range = z3.BitVecSort(value_range) super(Array, self).__init__(z3.Array(name, self.domain, self.range)) class K(BaseArray): """A basic symbolic array, which can be initialized with a default value.""" def __init__(self, domain: int, value_range: int, value: int): """Initializes an array with a default value. :param domain: The domain for the array (10 -> all the values that a bv of size 10 could take) :param value_range: The range for the values in the array (10 -> all the values that a bv of size 10 could take) :param value: The default value to use for this array """ self.domain = z3.BitVecSort(domain) self.value = z3.BitVecVal(value, value_range) self.raw = z3.K(self.domain, self.value) ================================================ FILE: mythril/laser/smt/bitvec.py ================================================ """This module provides classes for an SMT abstraction of bit vectors.""" from operator import eq, lshift, ne, rshift from typing import Any, Callable, Optional, Set, Union, cast import z3 from mythril.laser.smt.bool import Bool from mythril.laser.smt.expression import Expression Annotations = Set[Any] # fmt: off def _padded_operation(a: z3.BitVec, b: z3.BitVec, operator): if a.size() == b.size(): return operator(a, b) if a.size() < b.size(): a, b = b, a b = z3.Concat(z3.BitVecVal(0, a.size() - b.size()), b) return operator(a, b) class BitVec(Expression[z3.BitVecRef]): """A bit vector symbol.""" def __init__(self, raw: z3.BitVecRef, annotations: Optional[Annotations] = None): """ :param raw: :param annotations: """ super().__init__(raw, annotations) def size(self) -> int: """TODO: documentation :return: """ return self.raw.size() @property def symbolic(self) -> bool: """Returns whether this symbol doesn't have a concrete value. :return: """ self.simplify() return not isinstance(self.raw, z3.BitVecNumRef) @property def value(self) -> Optional[int]: """Returns the value of this symbol if concrete, otherwise None. :return: """ if self.symbolic: return None assert isinstance(self.raw, z3.BitVecNumRef) return self.raw.as_long() def __add__(self, other: Union[int, "BitVec"]) -> "BitVec": """Create an addition expression. :param other: :return: """ if isinstance(other, int): return BitVec(self.raw + other, annotations=self.annotations) union = self.annotations.union(other.annotations) return BitVec(self.raw + other.raw, annotations=union) def __sub__(self, other: Union[int, "BitVec"]) -> "BitVec": """Create a subtraction expression. :param other: :return: """ if isinstance(other, int): return BitVec(self.raw - other, annotations=self.annotations) union = self.annotations.union(other.annotations) return BitVec(self.raw - other.raw, annotations=union) def __mul__(self, other: "BitVec") -> "BitVec": """Create a multiplication expression. :param other: :return: """ union = self.annotations.union(other.annotations) return BitVec(self.raw * other.raw, annotations=union) def __truediv__(self, other: "BitVec") -> "BitVec": """Create a signed division expression. :param other: :return: """ union = self.annotations.union(other.annotations) return BitVec(self.raw / other.raw, annotations=union) def __and__(self, other: Union[int, "BitVec"]) -> "BitVec": """Create an and expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return BitVec(self.raw & other.raw, annotations=union) def __or__(self, other: Union[int, "BitVec"]) -> "BitVec": """Create an or expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return BitVec(self.raw | other.raw, annotations=union) def __xor__(self, other: Union[int, "BitVec"]) -> "BitVec": """Create a xor expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return BitVec(self.raw ^ other.raw, annotations=union) def __lt__(self, other: Union[int, "BitVec"]) -> Bool: """Create a signed less than expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return Bool(self.raw < other.raw, annotations=union) def __gt__(self, other: Union[int, "BitVec"]) -> Bool: """Create a signed greater than expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return Bool(self.raw > other.raw, annotations=union) def __le__(self, other: Union[int, "BitVec"]) -> Bool: """Create a signed less than expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return Bool(self.raw <= other.raw, annotations=union) def __ge__(self, other: Union[int, "BitVec"]) -> Bool: """Create a signed greater than expression. :param other: :return: """ if not isinstance(other, BitVec): other = BitVec(z3.BitVecVal(other, self.size())) union = self.annotations.union(other.annotations) return Bool(self.raw >= other.raw, annotations=union) # MYPY: fix complains about overriding __eq__ def __eq__(self, other: Union[int, "BitVec"]) -> Bool: # type: ignore """Create an equality expression. :param other: :return: """ if not isinstance(other, BitVec): return Bool( cast(z3.BoolRef, self.raw == other), annotations=self.annotations ) union = self.annotations.union(other.annotations) # Some of the BitVecs can be 512 bit due to sha3() eq_check = _padded_operation(self.raw, other.raw, eq) # MYPY: fix complaints due to z3 overriding __eq__ return Bool(cast(z3.BoolRef, eq_check), annotations=union) # MYPY: fix complains about overriding __ne__ def __ne__(self, other: Union[int, "BitVec"]) -> Bool: # type: ignore """Create an inequality expression. :param other: :return: """ if not isinstance(other, BitVec): return Bool( cast(z3.BoolRef, self.raw != other), annotations=self.annotations ) union = self.annotations.union(other.annotations) # Some of the BitVecs can be 512 bit due to sha3() neq_check = _padded_operation(self.raw, other.raw, ne) # MYPY: fix complaints due to z3 overriding __eq__ return Bool(cast(z3.BoolRef, neq_check), annotations=union) def _handle_shift(self, other: Union[int, "BitVec"], operator: Callable) -> "BitVec": """ Handles shift :param other: The other BitVector :param operator: The shift operator :return: the resulting output """ if not isinstance(other, BitVec): return BitVec( operator(self.raw, other), annotations=self.annotations ) union = self.annotations.union(other.annotations) return BitVec(operator(self.raw, other.raw), annotations=union) def __lshift__(self, other: Union[int, "BitVec"]) -> "BitVec": """ :param other: :return: """ return self._handle_shift(other, lshift) def __rshift__(self, other: Union[int, "BitVec"]) -> "BitVec": """ :param other: :return: """ return self._handle_shift(other, rshift) def __hash__(self) -> int: """ :return: """ return self.raw.__hash__() ================================================ FILE: mythril/laser/smt/bitvec_helper.py ================================================ from typing import Any, Callable, List, Set, Union, cast, overload import z3 from mythril.laser.smt.array import Array, BaseArray from mythril.laser.smt.bitvec import BitVec from mythril.laser.smt.bool import Bool, Or Annotations = Set[Any] def _z3_array_converter(array: Union[z3.Array, z3.K]) -> Array: new_array = Array( "name_to_be_overwritten", array.domain().size(), array.range().size() ) new_array.raw = array return new_array def _comparison_helper(a: BitVec, b: BitVec, operation: Callable) -> Bool: annotations = a.annotations.union(b.annotations) return Bool(operation(a.raw, b.raw), annotations) def _arithmetic_helper(a: BitVec, b: BitVec, operation: Callable) -> BitVec: raw = operation(a.raw, b.raw) union = a.annotations.union(b.annotations) return BitVec(raw, annotations=union) def LShR(a: BitVec, b: BitVec): return _arithmetic_helper(a, b, z3.LShR) @overload def If( a: Union[Bool, bool], b: Union[BitVec, int], c: Union[BitVec, int] ) -> BitVec: ... @overload def If(a: Union[Bool, bool], b: BaseArray, c: BaseArray) -> BaseArray: ... def If( a: Union[Bool, bool], b: Union[BaseArray, BitVec, int], c: Union[BaseArray, BitVec, int], ) -> Union[BitVec, BaseArray]: """Create an if-then-else expression. :param a: :param b: :param c: :return: """ if not isinstance(a, Bool): a = Bool(z3.BoolVal(a)) if isinstance(b, BaseArray) and isinstance(c, BaseArray): array = z3.If(a.raw, b.raw, c.raw) return _z3_array_converter(array) default_sort_size = 256 if isinstance(b, BitVec): default_sort_size = b.size() if isinstance(c, BitVec): default_sort_size = c.size() if not isinstance(b, BitVec): b = BitVec(z3.BitVecVal(b, default_sort_size)) if not isinstance(c, BitVec): c = BitVec(z3.BitVecVal(c, default_sort_size)) union = a.annotations.union(b.annotations).union(c.annotations) return BitVec(z3.If(a.raw, b.raw, c.raw), union) def UGT(a: BitVec, b: BitVec) -> Bool: """Create an unsigned greater than expression. :param a: :param b: :return: """ return _comparison_helper(a, b, z3.UGT) def UGE(a: BitVec, b: BitVec) -> Bool: """Create an unsigned greater than or equal to expression. :param a: :param b: :return: """ return Or(UGT(a, b), a == b) def ULT(a: BitVec, b: BitVec) -> Bool: """Create an unsigned less than expression. :param a: :param b: :return: """ return _comparison_helper(a, b, z3.ULT) def ULE(a: BitVec, b: BitVec) -> Bool: """Create an unsigned less than or equal to expression. :param a: :param b: :return: """ return Or(ULT(a, b), a == b) @overload def Concat(*args: List[BitVec]) -> BitVec: ... @overload def Concat(*args: BitVec) -> BitVec: ... def Concat(*args: Union[BitVec, List[BitVec]]) -> BitVec: """Create a concatenation expression. :param args: :return: """ # The following statement is used if a list is provided as an argument to concat if len(args) == 1 and isinstance(args[0], list): bvs: List[BitVec] = args[0] else: bvs = cast(List[BitVec], args) nraw = z3.Concat([a.raw for a in bvs]) annotations: Annotations = set() for bv in bvs: annotations = annotations.union(bv.annotations) return BitVec(nraw, annotations) def Extract(high: int, low: int, bv: BitVec) -> BitVec: """Create an extract expression. :param high: :param low: :param bv: :return: """ raw = z3.Extract(high, low, bv.raw) return BitVec(raw, annotations=bv.annotations) def URem(a: BitVec, b: BitVec) -> BitVec: """Create an unsigned remainder expression. :param a: :param b: :return: """ return _arithmetic_helper(a, b, z3.URem) def SRem(a: BitVec, b: BitVec) -> BitVec: """Create a signed remainder expression. :param a: :param b: :return: """ return _arithmetic_helper(a, b, z3.SRem) def UDiv(a: BitVec, b: BitVec) -> BitVec: """Create an unsigned division expression. :param a: :param b: :return: """ return _arithmetic_helper(a, b, z3.UDiv) def Sum(*args: BitVec) -> BitVec: """Create sum expression. :return: """ raw = z3.Sum([a.raw for a in args]) annotations: Annotations = set() for bv in args: annotations = annotations.union(bv.annotations) return BitVec(raw, annotations) def BVAddNoOverflow(a: Union[BitVec, int], b: Union[BitVec, int], signed: bool) -> Bool: """Creates predicate that verifies that the addition doesn't overflow. :param a: :param b: :param signed: :return: """ if not isinstance(a, BitVec): a = BitVec(z3.BitVecVal(a, 256)) if not isinstance(b, BitVec): b = BitVec(z3.BitVecVal(b, 256)) return Bool(z3.BVAddNoOverflow(a.raw, b.raw, signed)) def BVMulNoOverflow(a: Union[BitVec, int], b: Union[BitVec, int], signed: bool) -> Bool: """Creates predicate that verifies that the multiplication doesn't overflow. :param a: :param b: :param signed: :return: """ if not isinstance(a, BitVec): a = BitVec(z3.BitVecVal(a, 256)) if not isinstance(b, BitVec): b = BitVec(z3.BitVecVal(b, 256)) return Bool(z3.BVMulNoOverflow(a.raw, b.raw, signed)) def BVSubNoUnderflow( a: Union[BitVec, int], b: Union[BitVec, int], signed: bool ) -> Bool: """Creates predicate that verifies that the subtraction doesn't overflow. :param a: :param b: :param signed: :return: """ if not isinstance(a, BitVec): a = BitVec(z3.BitVecVal(a, 256)) if not isinstance(b, BitVec): b = BitVec(z3.BitVecVal(b, 256)) return Bool(z3.BVSubNoUnderflow(a.raw, b.raw, signed)) ================================================ FILE: mythril/laser/smt/bool.py ================================================ """This module provides classes for an SMT abstraction of boolean expressions.""" from typing import Set, Union, cast import z3 from mythril.laser.smt.expression import Expression # fmt: off class Bool(Expression[z3.BoolRef]): """This is a Bool expression.""" @property def is_false(self) -> bool: """Specifies whether this variable can be simplified to false. :return: """ self.simplify() return z3.is_false(self.raw) @property def is_true(self) -> bool: """Specifies whether this variable can be simplified to true. :return: """ self.simplify() return z3.is_true(self.raw) @property def value(self) -> Union[bool, None]: """Returns the concrete value of this bool if concrete, otherwise None. :return: Concrete value or None """ self.simplify() if self.is_true: return True elif self.is_false: return False else: return None # MYPY: complains about overloading __eq__ # noqa def __eq__(self, other: object) -> "Bool": # type: ignore """ :param other: :return: """ if isinstance(other, Expression): return Bool(cast(z3.BoolRef, self.raw == other.raw), self.annotations.union(other.annotations)) return Bool(cast(z3.BoolRef, self.raw == other), self.annotations) # MYPY: complains about overloading __ne__ # noqa def __ne__(self, other: object) -> "Bool": # type: ignore """ :param other: :return: """ if isinstance(other, Expression): return Bool(cast(z3.BoolRef, self.raw != other.raw), self.annotations.union(other.annotations)) return Bool(cast(z3.BoolRef, self.raw != other), self.annotations) def __bool__(self) -> bool: """ :return: """ if self.value is not None: return self.value else: return False def substitute(self, original_expression, new_expression): """ :param original_expression: :param new_expression: """ if self.raw is None: return original_z3 = original_expression.raw new_z3 = new_expression.raw self.raw = z3.substitute(self.raw, (original_z3, new_z3)) def __hash__(self) -> int: return self.raw.__hash__() def And(*args: Union[Bool, bool]) -> Bool: """Create an And expression.""" annotations: Set = set() args_list = [arg if isinstance(arg, Bool) else Bool(arg) for arg in args] for arg in args_list: annotations = annotations.union(arg.annotations) return Bool(z3.And([a.raw for a in args_list]), annotations) def Xor(a: Bool, b: Bool) -> Bool: """Create an And expression.""" union = a.annotations.union(b.annotations) return Bool(z3.Xor(a.raw, b.raw), union) def Or(*args: Union[Bool, bool]) -> Bool: """Create an or expression. :param a: :param b: :return: """ args_list = [arg if isinstance(arg, Bool) else Bool(arg) for arg in args] annotations: Set = set() for arg in args_list: annotations = annotations.union(arg.annotations) return Bool(z3.Or([a.raw for a in args_list]), annotations=annotations) def Not(a: Bool) -> Bool: """Create a Not expression. :param a: :return: """ return Bool(z3.Not(a.raw), a.annotations) def is_false(a: Bool) -> bool: """Returns whether the provided bool can be simplified to false. :param a: :return: """ return z3.is_false(a.raw) def is_true(a: Bool) -> bool: """Returns whether the provided bool can be simplified to true. :param a: :return: """ return z3.is_true(a.raw) ================================================ FILE: mythril/laser/smt/expression.py ================================================ """This module contains the SMT abstraction for a basic symbol expression.""" from typing import Any, Generic, Optional, Set, TypeVar, cast import z3 Annotations = Set[Any] T = TypeVar("T", bound=z3.ExprRef) class Expression(Generic[T]): """This is the base symbol class and maintains functionality for simplification and annotations.""" def __init__(self, raw: T, annotations: Optional[Annotations] = None): """ :param raw: :param annotations: """ self.raw = raw if annotations: assert isinstance(annotations, set) self._annotations = annotations or set() @property def annotations(self) -> Annotations: """Gets the annotations for this expression. :return: """ return self._annotations def annotate(self, annotation: Any) -> None: """Annotates this expression with the given annotation. :param annotation: """ self._annotations.add(annotation) def simplify(self) -> None: """Simplify this expression.""" self.raw = cast(T, z3.simplify(self.raw)) def __repr__(self) -> str: return repr(self.raw) def size(self): return self.raw.size() def __hash__(self) -> int: return self.raw.__hash__() def get_annotations(self, annotation: Any): return list(filter(lambda x: isinstance(x, annotation), self.annotations)) G = TypeVar("G", bound=Expression) def simplify(expression: G) -> G: """Simplify the expression . :param expression: :return: """ expression.simplify() return expression ================================================ FILE: mythril/laser/smt/function.py ================================================ from typing import Any, List, Set, cast import z3 from mythril.laser.smt.bitvec import BitVec class Function: """An uninterpreted function.""" def __init__(self, name: str, domain: List[int], value_range: int): """Initializes an uninterpreted function. :param name: Name of the Function :param domain: The domain for the Function (10 -> all the values that a bv of size 10 could take) :param value_range: The range for the values of the function (10 -> all the values that a bv of size 10 could take) """ self.domain = [] for element in domain: self.domain.append(z3.BitVecSort(element)) self.range = z3.BitVecSort(value_range) self.raw = z3.Function(name, *self.domain, self.range) def __call__(self, *items) -> BitVec: """Function accessor, item can be symbolic.""" annotations: Set[Any] = set().union(*[item.annotations for item in items]) return BitVec( cast(z3.BitVecRef, self.raw(*[item.raw for item in items])), annotations=annotations, ) ================================================ FILE: mythril/laser/smt/model.py ================================================ from typing import List, Union import z3 class Model: """The model class wraps a z3 model This implementation allows for multiple internal models, this is required for the use of an independence solver which has models for multiple queries which need an uniform output. """ def __init__(self, models: List[z3.ModelRef] = None): """ Initialize a model object :param models: the internal z3 models that this model should use """ self.raw = models or [] def decls(self) -> List[z3.ExprRef]: """Get the declarations for this model""" result: List[z3.ExprRef] = [] for internal_model in self.raw: result.extend(internal_model.decls()) return result def __getitem__(self, item) -> Union[None, z3.ExprRef]: """Get declaration from model If item is an int, then the declaration at offset item is returned If item is a declaration, then the interpretation is returned """ for internal_model in self.raw: is_last_model = self.raw.index(internal_model) == len(self.raw) - 1 try: result = internal_model[item] if result is not None: return result except IndexError: if is_last_model: raise continue return None def eval( self, expression: z3.ExprRef, model_completion: bool = False ) -> Union[None, z3.ExprRef]: """Evaluate the expression using this model :param expression: The expression to evaluate :param model_completion: Use the default value if the model has no interpretation of the given expression :return: The evaluated expression """ for internal_model in self.raw: is_last_model = self.raw.index(internal_model) == len(self.raw) - 1 is_relevant_model = expression.decl() in list(internal_model.decls()) if is_relevant_model or is_last_model: return internal_model.eval(expression, model_completion) return None ================================================ FILE: mythril/laser/smt/solver/__init__.py ================================================ import z3 from mythril.laser.smt.solver.independence_solver import IndependenceSolver from mythril.laser.smt.solver.solver import BaseSolver, Optimize, Solver from mythril.laser.smt.solver.solver_statistics import SolverStatistics from mythril.support.support_args import args if args.parallel_solving: z3.set_param("parallel.enable", True) ================================================ FILE: mythril/laser/smt/solver/independence_solver.py ================================================ from typing import Dict, List, Set, Tuple, cast import z3 from mythril.laser.smt.bool import Bool from mythril.laser.smt.model import Model from mythril.laser.smt.solver.solver_statistics import stat_smt_query def _get_expr_variables(expression: z3.ExprRef) -> List[z3.ExprRef]: """ Gets the variables that make up the current expression :param expression: :return: """ result = [] if not expression.children() and not isinstance(expression, z3.BitVecNumRef): result.append(expression) for child in expression.children(): c_children = _get_expr_variables(child) result.extend(c_children) return result class DependenceBucket: """Bucket object to contain a set of conditions that are dependent on each other""" def __init__(self, variables=None, conditions=None): """ Initializes a DependenceBucket object :param variables: Variables contained in the conditions :param conditions: The conditions that are dependent on each other """ self.variables: List[z3.ExprRef] = variables or [] self.conditions: List[z3.ExprRef] = conditions or [] class DependenceMap: """DependenceMap object that maintains a set of dependence buckets, used to separate independent smt queries""" def __init__(self): """Initializes a DependenceMap object""" self.buckets: List[DependenceBucket] = [] self.variable_map: Dict[str, DependenceBucket] = {} def add_condition(self, condition: z3.BoolRef) -> None: """ Add condition to the dependence map :param condition: The condition that is to be added to the dependence map """ variables = set(_get_expr_variables(condition)) relevant_buckets = set() for variable in variables: try: bucket = self.variable_map[str(variable)] relevant_buckets.add(bucket) except KeyError: continue new_bucket = DependenceBucket(variables, [condition]) self.buckets.append(new_bucket) if relevant_buckets: # Merge buckets, and rewrite variable map accordingly relevant_buckets.add(new_bucket) new_bucket = self._merge_buckets(relevant_buckets) for variable in new_bucket.variables: self.variable_map[str(variable)] = new_bucket def _merge_buckets(self, bucket_list: Set[DependenceBucket]) -> DependenceBucket: """Merges the buckets in bucket list""" variables: List[str] = [] conditions: List[z3.BoolRef] = [] for bucket in bucket_list: self.buckets.remove(bucket) variables += bucket.variables conditions += bucket.conditions new_bucket = DependenceBucket(variables, conditions) self.buckets.append(new_bucket) return new_bucket class IndependenceSolver: """An SMT solver object that uses independence optimization""" def __init__(self): """""" self.raw = z3.Solver() self.constraints = [] self.models = [] def set_timeout(self, timeout: int) -> None: """Sets the timeout that will be used by this solver, timeout is in milliseconds. :param timeout: """ self.raw.set(timeout=timeout) def add(self, *constraints: Bool) -> None: """Adds the constraints to this solver. :param constraints: constraints to add """ raw_constraints: List[z3.BoolRef] = [ c.raw for c in cast(Tuple[Bool], constraints) ] self.constraints.extend(raw_constraints) def append(self, *constraints: Tuple[Bool]) -> None: """Adds the constraints to this solver. :param constraints: constraints to add """ raw_constraints: List[z3.BoolRef] = [ c.raw for c in cast(Tuple[Bool], constraints) ] self.constraints.extend(raw_constraints) @stat_smt_query def check(self) -> z3.CheckSatResult: """Returns z3 smt check result.""" dependence_map = DependenceMap() for constraint in self.constraints: dependence_map.add_condition(constraint) self.models = [] for bucket in dependence_map.buckets: self.raw.reset() self.raw.append(*bucket.conditions) check_result = self.raw.check() if check_result == z3.sat: self.models.append(self.raw.model()) else: return check_result return z3.sat def model(self) -> Model: """Returns z3 model for a solution.""" return Model(self.models) def reset(self) -> None: """Reset this solver.""" self.constraints = [] def pop(self, num) -> None: """Pop num constraints from this solver.""" self.constraints.pop(num) ================================================ FILE: mythril/laser/smt/solver/solver.py ================================================ """This module contains an abstract SMT representation of an SMT solver.""" import logging import os import sys from typing import Generic, List, Sequence, TypeVar, Union, cast import z3 from mythril.laser.smt.bool import Bool from mythril.laser.smt.expression import Expression from mythril.laser.smt.model import Model from mythril.laser.smt.solver.solver_statistics import stat_smt_query T = TypeVar("T", bound=Union[z3.Solver, z3.Optimize]) log = logging.getLogger(__name__) class BaseSolver(Generic[T]): def __init__(self, raw: T) -> None: """""" self.raw = raw def set_timeout(self, timeout: int) -> None: """Sets the timeout that will be used by this solver, timeout is in milliseconds. :param timeout: """ self.raw.set(timeout=timeout) def set_unsat_core(self) -> None: """ Enables the generation of unsatisfiable cores in the solver. This option must be activated if you intend to identify and extract the minimal set of conflicting constraints that make a problem unsolvable. Useful for diagnosing and debugging unsatisfiable conditions within constraint sets. """ self.raw.set(unsat_core=True) def add(self, *constraints: Bool) -> None: """Adds the constraints to this solver. :param constraints: :return: """ z3_constraints: Sequence[z3.BoolRef] = [ c.raw for c in cast(List[Bool], constraints) ] self.raw.add(z3_constraints) def assert_and_track(self, constraints: Bool, name: str) -> None: """ Adds a constraint to the solver with an associated name, allowing the constraint to be tracked. This is particularly useful for identifying specific constraints contributing to an unsat. :param constraints: The constraints. :param name: A unique identifier for the constraint, used for tracking purposes in unsat core extraction. :return: None """ self.raw.assert_and_track(constraints.raw, name) def append(self, *constraints: Bool) -> None: """Adds the constraints to this solver. :param constraints: :return: """ self.add(*constraints) @stat_smt_query def check(self, *args) -> z3.CheckSatResult: """Returns z3 smt check result. Also suppresses the stdout when running z3 library's check() to avoid unnecessary output :return: The evaluated result which is either of sat, unsat or unknown """ old_stdout = sys.stdout with open(os.devnull, "w") as dev_null_fd: sys.stdout = dev_null_fd try: evaluate = self.raw.check(args) except z3.z3types.Z3Exception as e: # Some requests crash the solver evaluate = z3.unknown log.info(f"Encountered Z3 exception when checking the constraints: {e}") sys.stdout = old_stdout return evaluate def model(self) -> Model: """Returns z3 model for a solution. :return: """ try: return Model([self.raw.model()]) except z3.z3types.Z3Exception as e: log.info(f"Encountered a Z3 exception while querying for the model: {e}") return Model() def sexpr(self): return self.raw.sexpr() class Solver(BaseSolver[z3.Solver]): """An SMT solver object.""" def __init__(self) -> None: """""" super().__init__(z3.Solver()) def reset(self) -> None: """Reset this solver.""" self.raw.reset() def pop(self, num: int) -> None: """Pop num constraints from this solver. :param num: """ self.raw.pop(num) class Optimize(BaseSolver[z3.Optimize]): """An optimizing smt solver.""" def __init__(self) -> None: """Create a new optimizing solver instance.""" super().__init__(z3.Optimize()) def minimize(self, element: Expression[z3.ExprRef]) -> None: """In solving this solver will try to minimize the passed expression. :param element: """ self.raw.minimize(element.raw) def maximize(self, element: Expression[z3.ExprRef]) -> None: """In solving this solver will try to maximize the passed expression. :param element: """ self.raw.maximize(element.raw) ================================================ FILE: mythril/laser/smt/solver/solver_statistics.py ================================================ from time import time from typing import Callable from mythril.support.support_utils import Singleton def stat_smt_query(func: Callable): """Measures statistics for annotated smt query check function""" stat_store = SolverStatistics() def function_wrapper(*args, **kwargs): if not stat_store.enabled: return func(*args, **kwargs) stat_store.query_count += 1 begin = time() result = func(*args, **kwargs) end = time() stat_store.solver_time += end - begin return result return function_wrapper class SolverStatistics(object, metaclass=Singleton): """Solver Statistics Class Keeps track of the important statistics around smt queries """ def __init__(self): self.enabled = False self.query_count = 0 self.solver_time = 0 def __repr__(self): return "Query count: {} \nSolver time: {}".format( self.query_count, self.solver_time ) ================================================ FILE: mythril/mythril/__init__.py ================================================ from .mythril_analyzer import MythrilAnalyzer from .mythril_config import MythrilConfig from .mythril_disassembler import MythrilDisassembler ================================================ FILE: mythril/mythril/mythril_analyzer.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import logging import traceback from argparse import Namespace from typing import List, Optional from mythril.analysis.callgraph import generate_graph from mythril.analysis.report import Issue, Report from mythril.analysis.security import fire_lasers, retrieve_callback_issues from mythril.analysis.symbolic import SymExecWrapper from mythril.analysis.traceexplore import get_serializable_statespace from mythril.ethereum.evmcontract import EVMContract from mythril.exceptions import DetectorNotFoundError from mythril.laser.execution_info import ExecutionInfo from mythril.laser.smt import SolverStatistics from mythril.support.loader import DynLoader from mythril.support.source_support import Source from mythril.support.start_time import StartTime from mythril.support.support_args import args from .mythril_disassembler import MythrilDisassembler log = logging.getLogger(__name__) LARGE_TIME = 300 class MythrilAnalyzer: """ The Mythril Analyzer class Responsible for the analysis of the smart contracts """ def __init__( self, disassembler: MythrilDisassembler, cmd_args: Namespace, strategy: str = "dfs", address: Optional[str] = None, ): """ :param disassembler: The MythrilDisassembler class :param cmd_args: The command line args Namespace :param strategy: Search strategy :param address: Address of the contract """ self.eth = disassembler.eth self.contracts: List[EVMContract] = disassembler.contracts or [] self.use_onchain_data = not cmd_args.no_onchain_data self.strategy = strategy self.address = address self.max_depth = cmd_args.max_depth self.execution_timeout = cmd_args.execution_timeout self.loop_bound = cmd_args.loop_bound self.create_timeout = cmd_args.create_timeout self.disable_dependency_pruning = cmd_args.disable_dependency_pruning self.custom_modules_directory = ( cmd_args.custom_modules_directory if cmd_args.custom_modules_directory else "" ) args.pruning_factor = cmd_args.pruning_factor args.solver_timeout = cmd_args.solver_timeout args.parallel_solving = cmd_args.parallel_solving args.unconstrained_storage = cmd_args.unconstrained_storage args.call_depth_limit = cmd_args.call_depth_limit args.disable_iprof = cmd_args.disable_iprof args.solver_log = cmd_args.solver_log args.transaction_sequences = cmd_args.transaction_sequences args.disable_coverage_strategy = cmd_args.disable_coverage_strategy args.disable_mutation_pruner = cmd_args.disable_mutation_pruner args.enable_summaries = cmd_args.enable_summaries args.enable_state_merge = cmd_args.enable_state_merging if args.pruning_factor is None: if self.execution_timeout > LARGE_TIME: args.pruning_factor = 1 else: args.pruning_factor = 0 def dump_statespace(self, contract: EVMContract = None) -> str: """ Returns serializable statespace of the contract :param contract: The Contract on which the analysis should be done :return: The serialized state space """ sym = SymExecWrapper( contract or self.contracts[0], self.address, self.strategy, dynloader=DynLoader(self.eth, active=self.use_onchain_data), max_depth=self.max_depth, execution_timeout=self.execution_timeout, create_timeout=self.create_timeout, disable_dependency_pruning=self.disable_dependency_pruning, run_analysis_modules=False, custom_modules_directory=self.custom_modules_directory, ) return get_serializable_statespace(sym) def graph_html( self, contract: EVMContract = None, enable_physics: bool = False, phrackify: bool = False, transaction_count: Optional[int] = None, ) -> str: """ :param contract: The Contract on which the analysis should be done :param enable_physics: If true then enables the graph physics simulation :param phrackify: If true generates Phrack-style call graph :param transaction_count: The amount of transactions to be executed :return: The generated graph in html format """ sym = SymExecWrapper( contract or self.contracts[0], self.address, self.strategy, dynloader=DynLoader(self.eth, active=self.use_onchain_data), max_depth=self.max_depth, execution_timeout=self.execution_timeout, transaction_count=transaction_count, create_timeout=self.create_timeout, disable_dependency_pruning=self.disable_dependency_pruning, run_analysis_modules=False, custom_modules_directory=self.custom_modules_directory, ) return generate_graph(sym, physics=enable_physics, phrackify=phrackify) def fire_lasers( self, modules: Optional[List[str]] = None, transaction_count: Optional[int] = None, ) -> Report: """ :param modules: The analysis modules which should be executed :param transaction_count: The amount of transactions to be executed :return: The Report class which contains the all the issues/vulnerabilities """ all_issues: List[Issue] = [] SolverStatistics().enabled = True exceptions = [] execution_info: Optional[List[ExecutionInfo]] = None for contract in self.contracts: StartTime() # Reinitialize start time for new contracts try: sym = SymExecWrapper( contract, self.address, self.strategy, dynloader=DynLoader(self.eth, active=self.use_onchain_data), max_depth=self.max_depth, execution_timeout=self.execution_timeout, loop_bound=self.loop_bound, create_timeout=self.create_timeout, transaction_count=transaction_count, modules=modules, compulsory_statespace=False, disable_dependency_pruning=self.disable_dependency_pruning, custom_modules_directory=self.custom_modules_directory, ) issues = fire_lasers(sym, modules) execution_info = sym.execution_info except DetectorNotFoundError as e: # Bubble up raise e except KeyboardInterrupt: log.critical("Keyboard Interrupt") issues = retrieve_callback_issues(modules) except Exception: log.critical( "Exception occurred, aborting analysis. Please report this issue to the Mythril GitHub page.\n" + traceback.format_exc() ) issues = retrieve_callback_issues(modules) exceptions.append(traceback.format_exc()) for issue in issues: issue.add_code_info(contract) all_issues += issues log.info("Solver statistics: \n{}".format(str(SolverStatistics()))) source_data = Source() source_data.get_source_from_contracts_list(self.contracts) # Finally, output the results report = Report( contracts=self.contracts, exceptions=exceptions, execution_info=execution_info, ) for issue in all_issues: report.append_issue(issue) return report ================================================ FILE: mythril/mythril/mythril_config.py ================================================ import codecs import logging import os from configparser import ConfigParser from pathlib import Path from shutil import copyfile from typing import Optional from mythril.ethereum.interface.rpc.client import EthJsonRpc from mythril.exceptions import CriticalError from mythril.support.lock import LockFile log = logging.getLogger(__name__) class MythrilConfig: """ The Mythril Analyzer class Responsible for setup of the mythril environment """ def __init__(self): self.infura_id: str = os.getenv("INFURA_ID") self.mythril_dir = self.init_mythril_dir() self.config_path = os.path.join(self.mythril_dir, "config.ini") self._init_config() self.eth: Optional[EthJsonRpc] = None def set_api_infura_id(self, id): self.infura_id = id @staticmethod def init_mythril_dir() -> str: """ Initializes the mythril dir and config.ini file :return: The mythril dir's path """ try: mythril_dir = os.environ["MYTHRIL_DIR"] except KeyError: mythril_dir = os.path.join(os.path.expanduser("~"), ".mythril") if not os.path.exists(mythril_dir): # Initialize data directory log.info("Creating mythril data directory") os.mkdir(mythril_dir) db_path = str(Path(mythril_dir) / "signatures.db") if not os.path.exists(db_path): # if the default mythril dir doesn't contain a signature DB # initialize it with the default one from the project root asset_dir = Path(__file__).parent.parent / "support" / "assets" copyfile(str(asset_dir / "signatures.db"), db_path) return mythril_dir def _init_config(self): """If no config file exists, create it and add default options. Defaults:- - dynamic loading is set to infura by default in the file """ if not os.path.exists(self.config_path): log.info("No config file found. Creating default: " + self.config_path) open(self.config_path, "a").close() config = ConfigParser(allow_no_value=True) config.optionxform = str with LockFile(self.config_path): config.read(self.config_path, "utf-8") if "defaults" not in config.sections(): self._add_default_options(config) if not config.has_option("defaults", "dynamic_loading"): self._add_dynamic_loading_option(config) if not config.has_option("defaults", "infura_id"): config.set("defaults", "infura_id", "") with codecs.open(self.config_path, "w", "utf-8") as fp: config.write(fp) if not self.infura_id: self.infura_id = config.get("defaults", "infura_id", fallback="") @staticmethod def _add_default_options(config: ConfigParser) -> None: """ Adds defaults option to config.ini :param config: The config file object :return: None """ config.add_section("defaults") @staticmethod def _add_dynamic_loading_option(config: ConfigParser) -> None: """ Sets the dynamic loading config option in .mythril/config.ini file :param config: The config file object :return: None """ config.set( "defaults", "#– To connect to Infura use dynamic_loading: infura", "" ) config.set( "defaults", "#– To connect to Rpc use " "dynamic_loading: HOST:PORT / ganache / infura-[network_name]", "", ) config.set( "defaults", "#– To connect to local host use dynamic_loading: localhost", "" ) config.set("defaults", "dynamic_loading", "infura") def set_api_rpc_infura(self) -> None: """Set the RPC mode to INFURA on Mainnet.""" log.info("Using INFURA Main Net for RPC queries") self.eth = EthJsonRpc( "mainnet.infura.io/v3/{}".format(self.infura_id), None, True ) def set_api_rpc(self, rpc: str = None, rpctls: bool = False) -> None: """ Sets the RPC mode to either of ganache or infura :param rpc: either of the strings - ganache, infura-mainnet, infura-rinkeby, infura-kovan, infura-ropsten, infura-goerli, avalanche, arbitrum, bsc, optimism, polygon """ if rpc == "ganache": rpcconfig = ("localhost", 7545, False) elif rpc.startswith("infura-"): network = rpc.replace("infura-", "") layer_one = ["mainnet", "rinkeby", "kovan", "ropsten", "goerli", "sepolia"] layer_two = [ "avalanche", "arbitrum", "bsc", "optimism", "polygon", "celo", "starknet", "aurora", "near", "palm", ] if network in layer_one + layer_two: if self.infura_id in (None, ""): log.info( "Infura key not provided, so onchain access is disabled. " "Use --infura-id " "or set it in the environment variable INFURA_ID " "or in the ~/.mythril/config.ini file" ) self.eth = None return if network in layer_one: rpcconfig = ( f"{network}.infura.io/v3/{self.infura_id}", None, True, ) else: rpcconfig = ( f"{network}-mainnet.infura.io/v3/{self.infura_id}", None, True, ) else: raise CriticalError( f"Invalid network {network}, use 'mainnet', 'rinkeby', 'kovan', 'ropsten', 'goerli', 'avalanche', 'arbitrum', 'optimism', or 'polygon'" ) else: try: host, port = rpc.split(":") rpcconfig = (host, int(port), rpctls) except ValueError: raise CriticalError( "Invalid RPC argument, use 'ganache', 'infura-[network]', or 'HOST:PORT'" ) if rpcconfig: log.info("Using RPC settings: %s" % str(rpcconfig)) self.eth = EthJsonRpc(rpcconfig[0], rpcconfig[1], rpcconfig[2]) else: raise CriticalError("Invalid RPC settings, check help for details.") def set_api_rpc_localhost(self) -> None: """Set the RPC mode to a local instance.""" log.info("Using default RPC settings: http://localhost:8545") self.eth = EthJsonRpc("localhost", 8545) def set_api_from_config_path(self) -> None: """Set the RPC mode based on a given config file.""" config = ConfigParser(allow_no_value=False) config.optionxform = str config.read(self.config_path, "utf-8") if config.has_option("defaults", "dynamic_loading"): dynamic_loading = config.get("defaults", "dynamic_loading") else: dynamic_loading = "infura" self._set_rpc(dynamic_loading) def _set_rpc(self, rpc_type: str) -> None: """ Sets rpc based on the type :param rpc_type: The type of connection: like infura, ganache, localhost :return: """ if rpc_type == "infura": self.set_api_rpc_infura() elif rpc_type == "localhost": self.set_api_rpc_localhost() else: self.set_api_rpc(rpc_type) ================================================ FILE: mythril/mythril/mythril_disassembler.py ================================================ import json import logging import os import re import shutil import subprocess import warnings from pathlib import Path from typing import List, Optional, Tuple import solc from eth_utils import int_to_big_endian from semantic_version import NpmSpec, Version from mythril.ethereum import util from mythril.ethereum.evmcontract import EVMContract from mythril.ethereum.interface.rpc.client import EthJsonRpc from mythril.ethereum.interface.rpc.exceptions import ConnectionError from mythril.exceptions import CompilerError, CriticalError, NoContractFoundError from mythril.solidity.soliditycontract import ( SolidityContract, get_contracts_from_file, get_contracts_from_foundry, ) from mythril.support import signatures from mythril.support.support_args import args from mythril.support.support_utils import rzpad, sha3, zpad def format_warning(message, category, filename, lineno, line=""): return "{}: {}\n\n".format(str(filename), str(message)) warnings.formatwarning = format_warning log = logging.getLogger(__name__) class MythrilDisassembler: """ The Mythril Disassembler class Responsible for generating disassembly of smart contracts: - Compiles solc code from file/onchain - Can also be used to access onchain storage data """ def __init__( self, eth: Optional[EthJsonRpc] = None, solc_version: str = None, solc_settings_json: str = None, solc_args=None, ) -> None: args.solc_args = solc_args self.solc_version = solc_version self.solc_binary = self._init_solc_binary(solc_version) self.solc_settings_json = solc_settings_json self.eth = eth self.sigs = signatures.SignatureDB() self.contracts: List[EVMContract] = [] @staticmethod def _init_solc_binary(version: str) -> Optional[str]: """ Only proper versions are supported. No nightlies, commits etc (such as available in remix). This functions extracts :param version: Version of the solc binary required :return: AThe solc binary of the corresponding version """ if not version: return None # tried converting input to semver, seemed not necessary so just slicing for now try: main_version = solc.get_solc_version_string() except: main_version = "" # allow missing solc will download instead main_version_number = re.search(r"\d+.\d+.\d+", main_version) if version.startswith("v"): version = version[1:] if version == main_version_number: log.info("Given version matches installed version") solc_binary = os.environ.get("SOLC") or "solc" else: solc_binary = util.solc_exists(version) if solc_binary is None: raise CriticalError( "The version of solc that is needed cannot be installed automatically" ) else: log.info("Setting the compiler to %s", solc_binary) return solc_binary def load_from_bytecode( self, code: str, bin_runtime: bool = False, address: Optional[str] = None ) -> Tuple[str, EVMContract]: """ Returns the address and the contract class for the given bytecode :param code: Bytecode :param bin_runtime: Whether the code is runtime code or creation code :param address: address of contract :return: tuple(address, Contract class) """ if address is None: address = util.get_indexed_address(0) if bin_runtime: self.contracts.append( EVMContract( code=code, name="MAIN", ) ) else: self.contracts.append( EVMContract( creation_code=code, name="MAIN", ) ) return address, self.contracts[-1] # return address and contract object def load_from_address(self, address: str) -> Tuple[str, EVMContract]: """ Returns the contract given it's on chain address :param address: The on chain address of a contract :return: tuple(address, contract) """ if not re.match(r"0x[a-fA-F0-9]{40}", address): raise CriticalError("Invalid contract address. Expected format is '0x...'.") if self.eth is None: raise CriticalError( "Please check whether the Infura key is set or use a different RPC method." ) try: code = self.eth.eth_getCode(address) except FileNotFoundError as e: raise CriticalError("IPC error: " + str(e)) except ConnectionError: raise CriticalError( "Could not connect to RPC server. Make sure that your node is running and that RPC parameters are set correctly." ) except Exception as e: raise CriticalError("IPC / RPC error: " + str(e)) if code == "0x" or code == "0x0": raise CriticalError( "Received an empty response from eth_getCode. Check the contract address and verify that you are on the correct chain." ) else: self.contracts.append(EVMContract(code, name=address)) return address, self.contracts[-1] # return address and contract object def load_from_foundry(self): project_root = os.getcwd() cmd = ["forge", "build", "--build-info", "--force"] with subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=project_root, executable=shutil.which(cmd[0]), ) as p: stdout, stderr = p.communicate() stdout, stderr = (stdout.decode(), stderr.decode()) if stderr: log.error(stderr) build_dir = Path(project_root, "artifacts", "contracts", "build-info") build_dir = os.path.join(project_root, "artifacts", "contracts", "build-info") address = util.get_indexed_address(0) files = sorted( os.listdir(build_dir), key=lambda x: os.path.getmtime(Path(build_dir, x)) ) files = [str(f) for f in files if str(f).endswith(".json")] if not files: txt = f"`compile` failed. Can you run it?\n{build_dir} is empty" raise Exception(txt) contracts = [] for file in files: build_info = Path(build_dir, file) with open(build_info, encoding="utf8") as file_desc: loaded_json = json.load(file_desc) targets_json = loaded_json["output"] input_json = loaded_json["input"] compiler = "solc" if input_json["language"] == "Solidity" else "vyper" if compiler == "vyper": raise NotImplementedError("Support for Vyper is not implemented.") if "contracts" in targets_json: for original_filename, contracts_info in targets_json[ "contracts" ].items(): for contract in get_contracts_from_foundry( original_filename, targets_json ): self.contracts.append(contract) contracts.append(contract) self.sigs.add_sigs(original_filename, targets_json) return address, contracts def check_run_integer_module(self, source_file): with open(source_file, "r") as f: for line in f: if "unchecked" in line: return True if self.solc_version is None: # Runs the version installed in the system (likely 0.8.0+) # Post 0.8.0 versions automatically add assertions to sanity check arithmetic return False # Strip leading 'v' from version if it's there normalized_version = self.solc_version.lstrip("v") # Check if solc_version is not provided or doesn't match the required version # As post 0.8.0 solc versions automatically add assertions to sanity check arithmetic if not self.solc_version or not NpmSpec("^0.8.0").match( Version(normalized_version) ): return True return False def load_from_solidity( self, solidity_files: List[str] ) -> Tuple[str, List[SolidityContract]]: """ :param solidity_files: List of solidity_files :return: tuple of address, contract class list """ address = util.get_indexed_address(0) contracts = [] for file in solidity_files: if ":" in file: file, contract_name = file.split(":") else: contract_name = None file = os.path.expanduser(file) solc_binary = self.solc_binary if solc_binary is None: solc_binary, self.solc_version = util.extract_binary(file) if self.check_run_integer_module(file) is False: args.use_integer_module = False try: # import signatures from solidity source self.sigs.import_solidity_file( file, solc_binary=solc_binary, solc_settings_json=self.solc_settings_json, ) if contract_name is not None: contract = SolidityContract( input_file=file, name=contract_name, solc_settings_json=self.solc_settings_json, solc_binary=solc_binary, ) self.contracts.append(contract) contracts.append(contract) else: for contract in get_contracts_from_file( input_file=file, solc_settings_json=self.solc_settings_json, solc_binary=solc_binary, ): self.contracts.append(contract) contracts.append(contract) except FileNotFoundError as e: raise CriticalError(f"Input file not found {e}") except CompilerError as e: error_msg = str(e) # Check if error is related to solidity version mismatch if ( "Error: Source file requires different compiler version" in error_msg ): # Grab relevant line "pragma solidity ...", excluding any comments solv_pragma_line = error_msg.split("\n")[-3].split("//")[0] # Grab solidity version from relevant line solv_match = re.findall(r"[0-9]+\.[0-9]+\.[0-9]+", solv_pragma_line) error_suggestion = ( "" if len(solv_match) != 1 else solv_match[0] ) error_msg = ( error_msg + '\nSolidityVersionMismatch: Try adding the option "--solv ' + error_suggestion + '"\n' ) raise CriticalError(error_msg) except NoContractFoundError: log.error( "The file " + file + " does not contain a compilable contract." ) return address, contracts @staticmethod def hash_for_function_signature(func: str) -> str: """ Return function nadmes corresponding signature hash :param func: function name :return: Its hash signature """ return "0x%s" % sha3(func)[:4].hex() def get_state_variable_from_storage( self, address: str, params: Optional[List[str]] = None ) -> str: """ Get variables from the storage :param address: The contract address :param params: The list of parameters param types: [position, length] or ["mapping", position, key1, key2, ... ] or [position, length, array] :return: The corresponding storage slot and its value """ params = params or [] (position, length, mappings) = (0, 1, []) try: if params[0] == "mapping": if len(params) < 3: raise CriticalError("Invalid number of parameters.") position = int(params[1]) position_formatted = zpad(int_to_big_endian(position), 32) for i in range(2, len(params)): key = bytes(params[i], "utf8") key_formatted = rzpad(key, 32) mappings.append( int.from_bytes( sha3(key_formatted + position_formatted), byteorder="big" ) ) length = len(mappings) if length == 1: position = mappings[0] else: if len(params) >= 4: raise CriticalError("Invalid number of parameters.") if len(params) >= 1: position = int(params[0]) if len(params) >= 2: length = int(params[1]) if len(params) == 3 and params[2] == "array": position_formatted = zpad(int_to_big_endian(position), 32) position = int.from_bytes(sha3(position_formatted), byteorder="big") except ValueError: raise CriticalError( "Invalid storage index. Please provide a numeric value." ) outtxt = [] try: if length == 1: outtxt.append( "{}: {}".format( position, self.eth.eth_getStorageAt(address, position) ) ) else: if len(mappings) > 0: for i in range(0, len(mappings)): position = mappings[i] outtxt.append( "{}: {}".format( hex(position), self.eth.eth_getStorageAt(address, position), ) ) else: for i in range(position, position + length): outtxt.append( "{}: {}".format( hex(i), self.eth.eth_getStorageAt(address, i) ) ) except FileNotFoundError as e: raise CriticalError("IPC error: " + str(e)) except ConnectionError: raise CriticalError( "Could not connect to RPC server. " "Make sure that your node is running and that RPC parameters are set correctly." ) return "\n".join(outtxt) ================================================ FILE: mythril/plugin/__init__.py ================================================ from mythril.plugin.interface import MythrilCLIPlugin, MythrilPlugin from mythril.plugin.loader import MythrilPluginLoader ================================================ FILE: mythril/plugin/discovery.py ================================================ try: # Older python versions import pkg_resources except Exception: pkg_resources = None from importlib.metadata import entry_points from typing import Any, Dict, List, Optional from mythril.plugin.interface import MythrilPlugin from mythril.support.support_utils import Singleton class PluginDiscovery(object, metaclass=Singleton): """PluginDiscovery class This plugin implements the logic to discover and build plugins in installed python packages """ # Installed plugins structure. Retrieves all modules that have an entry point for mythril.plugins _installed_plugins: Optional[Dict[str, Any]] = None def init_installed_plugins(self): if pkg_resources: self._installed_plugins = { entry_point.name: entry_point.load() for entry_point in pkg_resources.iter_entry_points("mythril.plugins") } else: all_entry_points = entry_points() mythril_plugins = [ ep for ep in all_entry_points if ep.group == "mythril.plugins" ] self._installed_plugins = { entry_point.name: entry_point.load() for entry_point in mythril_plugins } @property def installed_plugins(self): if self._installed_plugins is None: self.init_installed_plugins() return self._installed_plugins def is_installed(self, plugin_name: str) -> bool: """Returns whether there is python package with a plugin with plugin_name""" return plugin_name in self.installed_plugins.keys() def build_plugin(self, plugin_name: str, plugin_args: Dict) -> MythrilPlugin: """Returns the plugin for the given plugin_name if it is installed""" if not self.is_installed(plugin_name): raise ValueError(f"Plugin with name: `{plugin_name}` is not installed") plugin = self.installed_plugins.get(plugin_name) if plugin is None or not issubclass(plugin, MythrilPlugin): raise ValueError(f"No valid plugin was found for {plugin_name}") return plugin(**plugin_args) def get_plugins(self, default_enabled=None) -> List[str]: """Gets a list of installed mythril plugins :param default_enabled: Select plugins that are enabled by default :return: List of plugin names """ if default_enabled is None: return list(self.installed_plugins.keys()) return [ plugin_name for plugin_name, plugin_class in self.installed_plugins.items() if plugin_class.plugin_default_enabled == default_enabled ] ================================================ FILE: mythril/plugin/interface.py ================================================ from abc import ABC from mythril.laser.plugin.builder import PluginBuilder as LaserPluginBuilder class MythrilPlugin: """MythrilPlugin interface Mythril Plugins can be used to extend Mythril in different ways: 1. Extend Laser, in which case the LaserPlugin interface must also be extended 2. Extend Laser with a new search strategy in which case the SearchStrategy needs to be implemented 3. Add an analysis module, in this case the AnalysisModule interface needs to be implemented 4. Add new commands to the Mythril cli, using the MythrilCLIPlugin Interface """ author = "Default Author" name = "Plugin Name" plugin_license = "All rights reserved." plugin_type = "Mythril Plugin" plugin_version = "0.0.1 " plugin_description = "This is an example plugin description" def __init__(self, **kwargs): pass def __repr__(self): plugin_name = type(self).__name__ return f"{plugin_name} - {self.plugin_version} - {self.author}" class MythrilCLIPlugin(MythrilPlugin): """MythrilCLIPlugin interface This interface should be implemented by mythril plugins that aim to add commands to the mythril cli """ pass class MythrilLaserPlugin(MythrilPlugin, LaserPluginBuilder, ABC): """Mythril Laser Plugin interface Plugins of this type are used to instrument the laser EVM """ pass ================================================ FILE: mythril/plugin/loader.py ================================================ import logging from typing import Dict from mythril.analysis.module import DetectionModule from mythril.analysis.module.loader import ModuleLoader from mythril.laser.plugin.loader import LaserPluginLoader from mythril.plugin.discovery import PluginDiscovery from mythril.plugin.interface import MythrilLaserPlugin, MythrilPlugin from mythril.support.support_utils import Singleton log = logging.getLogger(__name__) class UnsupportedPluginType(Exception): """Raised when a plugin with an unsupported type is loaded""" pass class MythrilPluginLoader(object, metaclass=Singleton): """MythrilPluginLoader singleton This object permits loading MythrilPlugin's """ def __init__(self): log.info("Initializing mythril plugin loader") self.loaded_plugins = [] self.plugin_args: Dict[str, Dict] = dict() self._load_default_enabled() def set_args(self, plugin_name: str, **kwargs): self.plugin_args[plugin_name] = kwargs def load(self, plugin: MythrilPlugin): """Loads the passed plugin This function handles input validation and dispatches loading to type specific loaders. Supported plugin types: - laser plugins - detection modules """ if not isinstance(plugin, MythrilPlugin): raise ValueError("Passed plugin is not of type MythrilPlugin") logging.info(f"Loading plugin: {plugin.name}") log.info(f"Loading plugin: {str(plugin)}") if isinstance(plugin, DetectionModule): self._load_detection_module(plugin) elif isinstance(plugin, MythrilLaserPlugin): self._load_laser_plugin(plugin) else: raise UnsupportedPluginType("Passed plugin type is not yet supported") self.loaded_plugins.append(plugin) log.info(f"Finished loading plugin: {plugin.name}") @staticmethod def _load_detection_module(plugin: DetectionModule): """Loads the passed detection module""" log.info(f"Loading detection module: {plugin.name}") ModuleLoader().register_module(plugin) @staticmethod def _load_laser_plugin(plugin: MythrilLaserPlugin): """Loads the laser plugin""" log.info(f"Loading laser plugin: {plugin.name}") LaserPluginLoader().load(plugin) def _load_default_enabled(self): """Loads the plugins that have the default enabled flag""" log.info("Loading installed analysis modules that are enabled by default") for plugin_name in PluginDiscovery().get_plugins(default_enabled=True): plugin = PluginDiscovery().build_plugin( plugin_name, self.plugin_args.get(plugin_name, {}) ) self.load(plugin) ================================================ FILE: mythril/solidity/__init__.py ================================================ ================================================ FILE: mythril/solidity/features.py ================================================ TRANSFER_METHODS = ["transfer", "send"] class SolidityFeatureExtractor: def __init__(self, ast): self.ast = ast def extract_features(self): function_features = {} function_nodes = self.find_function_nodes(self.ast) modifier_vars = {} for modifier_node in self.find_modifier_nodes(self.ast): modifier_vars[modifier_node["name"]] = self.find_variables_in_require( modifier_node ) modifier_vars[modifier_node["name"]].update( self.find_variables_in_if(modifier_node) ) for node in function_nodes: function_name = self.get_function_name(node) contains_selfdestruct = self.contains_selfdestruct(node) contains_call = self.contains_call(node) contains_delegatecall = self.contains_delegatecall(node) contains_callcode = self.contains_callcode(node) contains_staticcall = self.contains_staticcall(node) all_require_vars = self.find_variables_in_require(node) ether_vars = self.extract_address_variable(node) for potential_modifier in node.get("modifiers", []): # Issues with AST, sometimes, non-modifiers pop up here if potential_modifier["modifierName"]["name"] in modifier_vars: all_require_vars.update( modifier_vars[potential_modifier["modifierName"]["name"]] ) is_payable = self.is_function_payable(node) has_isowner_modifier = self.has_isowner_modifier(node) contains_assert = self.contains_assert(node) function_features[function_name] = { "contains_selfdestruct": contains_selfdestruct, "contains_call": contains_call, "is_payable": is_payable, "has_owner_modifier": has_isowner_modifier, "contains_assert": contains_assert, "contains_callcode": contains_callcode, "contains_delegatecall": contains_delegatecall, "contains_staticcall": contains_staticcall, "all_require_vars": all_require_vars, "transfer_vars": ether_vars, } return function_features def find_function_nodes(self, node): if node["nodeType"] == "FunctionDefinition": yield node if "nodes" in node: for child_node in node["nodes"]: yield from self.find_function_nodes(child_node) def find_modifier_nodes(self, node): if node["nodeType"] == "ModifierDefinition": yield node if "nodes" in node: for child_node in node["nodes"]: yield from self.find_modifier_nodes(child_node) def get_function_name(self, node): return node["name"] def contains_command(self, node, command): if isinstance(node, dict): if command in node.values(): return True for value in node.values(): if isinstance(value, (dict, list)): if self.contains_command(value, command): return True elif isinstance(node, list): for item in node: if self.contains_command(item, command): return True return False def contains_call(self, node): return self.contains_command(node, "call") def is_function_payable(self, node): return node.get("stateMutability") == "payable" def has_isowner_modifier(self, node): if "modifiers" in node: for modifier in node["modifiers"]: if modifier["modifierName"]["name"].lower() in ("isowner", "onlyowner"): return True return False def contains_assert(self, node): return self.contains_command(node, "assert") def contains_selfdestruct(self, node): return self.contains_command(node, "selfdestruct") def contains_delegatecall(self, node): return self.contains_command(node, "delegatecall") def contains_callcode(self, node): return self.contains_command(node, "callcode") def contains_staticcall(self, node): return self.contains_command(node, "staticcall") def contains_require(self, node): return self.contains_command(node, "require") def extract_nodes(self, node, command, parent=None): node_list = [] if isinstance(node, dict): if command in node.values(): node_list.append((parent, node)) for key, value in node.items(): if isinstance(value, (dict, list)): node_list.extend(self.extract_nodes(value, command, parent=node)) elif isinstance(node, list): for item in node: node_list.extend(self.extract_nodes(item, command, parent=node)) return node_list def find_all_variables(self, node): variables = set() def traverse(node): if isinstance(node, dict): for key, value in node.items(): if key == "nodeType" and value == "Identifier": if "name" in node: variables.add(node["name"]) elif isinstance(value, (dict, list)): traverse(value) elif isinstance(node, list): for item in node: traverse(item) traverse(node) return variables def find_variables_in_require(self, node): nodes = self.extract_nodes(node, "require") variables = set() for parent, _ in nodes: if "arguments" in parent: arguments = parent["arguments"] for argument in arguments: variables.update(self.find_all_variables(argument)) return variables def find_variables_in_if(self, node): variables = [] def traverse(node): if "condition" in node: condition = node["condition"] if ( "leftExpression" in condition and condition["leftExpression"]["nodeType"] == "Identifier" ): variables.append(condition["leftExpression"]["name"]) if ( "rightExpression" in condition and condition["rightExpression"]["nodeType"] == "Identifier" ): variables.append(condition["rightExpression"]["name"]) traverse(condition) if "falseBody" in node and node["falseBody"]: traverse(node["falseBody"]) if "trueBody" in node and node["trueBody"]: if ( "nodeType" in node["trueBody"] and node["trueBody"]["nodeType"] == "Block" ): statements = node["trueBody"].get("statements", []) for statement in statements: traverse(statement) else: traverse(node["trueBody"]) if "body" in node and node["body"]: if "nodeType" in node["body"] and node["body"]["nodeType"] == "Block": statements = node["body"].get("statements", []) for statement in statements: traverse(statement) else: traverse(node["body"]) traverse(node) return variables def extract_address_variable(self, node): if node is None or isinstance(node, (int, str)): return set([]) transfer_vars = set([]) if ( node.get("nodeType", "") == "ExpressionStatement" and node.get("expression", {}).get("nodeType") == "FunctionCall" ): expression = node["expression"].get("expression", None) if expression is not None and ( expression["nodeType"] == "MemberAccess" and expression["memberName"] in TRANSFER_METHODS ): address_variable = expression["expression"].get("name") if address_variable: transfer_vars.update(set([address_variable])) for key, value in node.items(): if isinstance(value, dict): transfer_vars.update(self.extract_address_variable(value)) elif isinstance(value, list): for item in value: transfer_vars.update(self.extract_address_variable(item)) return transfer_vars ================================================ FILE: mythril/solidity/soliditycontract.py ================================================ """This module contains representation classes for Solidity files, contracts and source mappings.""" import logging from typing import Dict, Set import mythril.laser.ethereum.util as helper from mythril.ethereum.evmcontract import EVMContract from mythril.ethereum.util import get_solc_json from mythril.exceptions import NoContractFoundError from mythril.solidity.features import SolidityFeatureExtractor log = logging.getLogger(__name__) class SolcAST: def __init__(self, ast): self.ast = ast @property def node_type(self): if "nodeType" in self.ast: return self.ast["nodeType"] if "name" in self.ast: return self.ast["name"] assert False, "Unknown AST type has been fed to SolcAST" @property def abs_path(self): if "absolutePath" in self.ast: return self.ast["absolutePath"] else: return None @property def nodes(self): if "nodes" in self.ast: return self.ast["nodes"] if "children" in self.ast: return self.ast["children"] assert False, "Unknown AST type has been fed to SolcAST" def __next__(self): yield self.ast.__next__() def __getitem__(self, item): return self.ast[item] class SolcSource: def __init__(self, source): self.source = source @property def ast(self): if "ast" in self.source: return SolcAST(self.source["ast"]) if "legacyAST" in self.source: return SolcAST(self.source["legacyAST"]) assert False, "Unknown source type has been fed to SolcSource" @property def id(self): return self.source["id"] @property def name(self): return self.source["name"] @property def contents(self): return self.source["contents"] class SourceMapping: def __init__(self, solidity_file_idx, offset, length, lineno, mapping): """Representation of a source mapping for a Solidity file.""" self.solidity_file_idx = solidity_file_idx self.offset = offset self.length = length self.lineno = lineno self.solc_mapping = mapping class SolidityFile: """Representation of a file containing Solidity code.""" def __init__(self, filename: str, data: str, full_contract_src_maps: Set[str]): """ Metadata class containing data regarding a specific solidity file :param filename: The filename of the solidity file :param data: The code of the solidity file :param full_contract_src_maps: The set of contract source mappings of all the contracts in the file """ self.filename = filename self.data = data self.full_contract_src_maps = full_contract_src_maps class SourceCodeInfo: def __init__(self, filename, lineno, code, mapping): """Metadata class containing a code reference for a specific file.""" self.filename = filename self.lineno = lineno self.code = code self.solc_mapping = mapping def get_contracts_from_file(input_file, solc_settings_json=None, solc_binary="solc"): """ :param input_file: :param solc_settings_json: :param solc_binary: """ data = get_solc_json( input_file, solc_settings_json=solc_settings_json, solc_binary=solc_binary ) try: contract_names = data["contracts"][input_file].keys() except KeyError: raise NoContractFoundError for contract_name in contract_names: if len( data["contracts"][input_file][contract_name]["evm"]["deployedBytecode"][ "object" ] ): yield SolidityContract( input_file=input_file, name=contract_name, solc_settings_json=solc_settings_json, solc_binary=solc_binary, ) def get_contracts_from_foundry(input_file, foundry_json): """ :param input_file: :param solc_settings_json: :param solc_binary: """ try: contract_names = foundry_json["contracts"][input_file].keys() except KeyError: raise NoContractFoundError for contract_name in contract_names: if len( foundry_json["contracts"][input_file][contract_name]["evm"][ "deployedBytecode" ]["object"] ): yield SolidityContract( input_file=input_file, name=contract_name, solc_settings_json=None, solc_binary=None, solc_data=foundry_json, ) class SolidityContract(EVMContract): """Representation of a Solidity contract.""" def __init__( self, input_file, name=None, solc_settings_json=None, solc_binary="solc", solc_data=None, ): if solc_data is None: data = get_solc_json( input_file, solc_settings_json=solc_settings_json, solc_binary=solc_binary, ) else: data = solc_data self.solc_indices = self.get_solc_indices(input_file, data) self.solc_json = data self.input_file = input_file if "ast" in data["sources"][str(input_file)]: # Not available in old solidity versions, around ~0.4.11 self.features = SolidityFeatureExtractor( data["sources"][str(input_file)]["ast"] ).extract_features() else: self.features = None has_contract = False # If a contract name has been specified, find the bytecode of that specific contract srcmap_constructor = [] srcmap = [] if name: contract = data["contracts"][input_file][name] if len(contract["evm"]["deployedBytecode"]["object"]): code = contract["evm"]["deployedBytecode"]["object"] creation_code = contract["evm"]["bytecode"]["object"] srcmap = contract["evm"]["deployedBytecode"]["sourceMap"].split(";") srcmap_constructor = contract["evm"]["bytecode"]["sourceMap"].split(";") has_contract = True # If no contract name is specified, get the last bytecode entry for the input file else: for contract_name, contract in sorted( data["contracts"][input_file].items() ): if len(contract["evm"]["deployedBytecode"]["object"]): name = contract_name code = contract["evm"]["deployedBytecode"]["object"] creation_code = contract["evm"]["bytecode"]["object"] srcmap = contract["evm"]["deployedBytecode"]["sourceMap"].split(";") srcmap_constructor = contract["evm"]["bytecode"]["sourceMap"].split( ";" ) has_contract = True if not has_contract: raise NoContractFoundError self.mappings = [] self.constructor_mappings = [] self._get_solc_mappings(srcmap) self._get_solc_mappings(srcmap_constructor, constructor=True) super().__init__(code, creation_code, name=name) @staticmethod def get_sources(indices_data: Dict, source_data: Dict) -> None: """ Get source indices mapping. Function not needed for older solc versions. """ if "generatedSources" not in source_data: return sources = source_data["generatedSources"] for source in sources: full_contract_src_maps = SolidityContract.get_full_contract_src_maps( SolcAST(source["ast"]) ) indices_data[source["id"]] = SolidityFile( source["name"], source["contents"], full_contract_src_maps ) @staticmethod def get_solc_indices(input_file: str, data: Dict) -> Dict: """ Returns solc file indices """ indices: Dict = {} for contract_data in data["contracts"].values(): for source_data in contract_data.values(): SolidityContract.get_sources(indices, source_data["evm"]["bytecode"]) SolidityContract.get_sources( indices, source_data["evm"]["deployedBytecode"] ) for source in data["sources"].values(): source = SolcSource(source) full_contract_src_maps = SolidityContract.get_full_contract_src_maps( source.ast ) if source.ast.abs_path is not None: abs_path = source.ast.abs_path else: abs_path = input_file with open(abs_path, "rb") as f: code = f.read() indices[source.id] = SolidityFile( abs_path, code.decode("utf-8"), full_contract_src_maps, ) return indices @staticmethod def get_full_contract_src_maps(ast: SolcAST) -> Set[str]: """ Takes a solc AST and gets the src mappings for all the contracts defined in the top level of the ast :param ast: AST of the contract :return: The source maps """ source_maps = set() if ast.node_type == "SourceUnit": for child in ast.nodes: if child.get("contractKind"): source_maps.add(child["src"]) elif ast.node_type == "YulBlock": for child in ast["statements"]: source_maps.add(child["src"]) return source_maps def get_source_info(self, address, constructor=False): """ :param address: :param constructor: :return: """ disassembly = self.creation_disassembly if constructor else self.disassembly mappings = self.constructor_mappings if constructor else self.mappings index = helper.get_instruction_index(disassembly.instruction_list, address) if index is None or index >= len(mappings): # TODO: Find why this scenario happens. Possibly an external call return None file_index = mappings[index].solidity_file_idx if file_index == -1: # If issue is detected in an internal file return None solidity_file = self.solc_indices[file_index] filename = solidity_file.filename offset = mappings[index].offset length = mappings[index].length code = solidity_file.data.encode("utf-8")[offset : offset + length].decode( "utf-8", errors="ignore" ) lineno = mappings[index].lineno return SourceCodeInfo(filename, lineno, code, mappings[index].solc_mapping) def _is_autogenerated_code(self, offset: int, length: int, file_index: int) -> bool: """ Checks whether the code is autogenerated or not :param offset: offset of the code :param length: length of the code :param file_index: file the code corresponds to :return: True if the code is internally generated, else false """ if file_index == -1: return True # Handle the common code src map for the entire code. if ( "{}:{}:{}".format(offset, length, file_index) in self.solc_indices[file_index].full_contract_src_maps ): return True return False def _get_solc_mappings(self, srcmap, constructor=False): """ :param srcmap: :param constructor: """ mappings = self.constructor_mappings if constructor else self.mappings prev_item = "" for item in srcmap: if item == "": item = prev_item mapping = item.split(":") if len(mapping) > 0 and len(mapping[0]) > 0: offset = int(mapping[0]) if len(mapping) > 1 and len(mapping[1]) > 0: length = int(mapping[1]) if len(mapping) > 2 and len(mapping[2]) > 0: idx = int(mapping[2]) if self._is_autogenerated_code(offset, length, idx): lineno = None else: lineno = ( self.solc_indices[idx] .data.encode("utf-8")[0:offset] .count("\n".encode("utf-8")) + 1 ) prev_item = item mappings.append(SourceMapping(idx, offset, length, lineno, item)) ================================================ FILE: mythril/support/__init__.py ================================================ ================================================ FILE: mythril/support/loader.py ================================================ """This module contains the dynamic loader logic to get on-chain storage data and dependencies.""" import functools import logging import re from typing import Optional from mythril.disassembler.disassembly import Disassembly from mythril.ethereum.interface.rpc.client import EthJsonRpc LRU_CACHE_SIZE = 4096 log = logging.getLogger(__name__) class DynLoader: """The dynamic loader class.""" def __init__(self, eth: Optional[EthJsonRpc], active=True): """ :param eth: :param active: """ self.eth = eth self.active = active @functools.lru_cache(LRU_CACHE_SIZE) def read_storage(self, contract_address: str, index: int) -> str: """ :param contract_address: :param index: :return: """ if not self.active: raise ValueError("Loader is disabled") if not self.eth: raise ValueError("Cannot load from the storage when eth is None") value = self.eth.eth_getStorageAt( contract_address, position=index, block="latest" ) if value.startswith("0x"): value = "0x0000000000000000000000000000000000000000000000000000000000000000" return value @functools.lru_cache(LRU_CACHE_SIZE) def read_balance(self, address: str) -> str: """ :param address: :return: """ if not self.active: raise ValueError("Cannot load from storage when the loader is disabled") if not self.eth: raise ValueError( "Cannot load from the chain when eth is None, please use rpc, or specify infura-id" ) return self.eth.eth_getBalance(address) @functools.lru_cache(LRU_CACHE_SIZE) def dynld(self, dependency_address: str) -> Optional[Disassembly]: """ :param dependency_address: :return: """ if not self.active: raise ValueError("Loader is disabled") if not self.eth: raise ValueError( "Cannot load from the chain when eth is None, please use rpc, or specify infura-id" ) log.debug("Dynld at contract %s", dependency_address) # Ensure that dependency_address is the correct length, with 0s prepended as needed. if isinstance(dependency_address, int): dependency_address = "0x{:040X}".format(dependency_address) else: dependency_address = ( "0x" + "0" * (42 - len(dependency_address)) + dependency_address[2:] ) m = re.match(r"^(0x[0-9a-fA-F]{40})$", dependency_address) if m: dependency_address = m.group(1) else: return None log.debug("Dependency address: %s", dependency_address) code = self.eth.eth_getCode(dependency_address) if code.startswith("0x"): return None else: return Disassembly(code) ================================================ FILE: mythril/support/lock.py ================================================ import errno import os import time """ credits: https://github.com/dmfrey/FileLock """ class LockFileException(Exception): pass class LockFile(object): """ Locks files. """ def __init__(self, file_name, timeout=100, delay=0.05): """ Initialises the file locker """ if timeout is not None and delay is None: raise ValueError("If timeout is not None, then delay must not be None.") self.is_locked = False self.lockfile = os.path.join(os.getcwd(), f"{file_name}.lock") self.file_name = file_name self.timeout = timeout self.delay = delay def acquire(self): """ Acquires a lock when possible. """ start_time = time.time() while True: try: self.fd = os.open(self.lockfile, os.O_CREAT | os.O_EXCL | os.O_RDWR) self.is_locked = True break except OSError as e: if e.errno != errno.EEXIST: raise if (time.time() - start_time) >= self.timeout: raise LockFileException( f"Stuck for more than {self.timeout} seconds waiting to unlock the file {self.filename}." ) time.sleep(self.delay) def release(self): """ Releases the lock """ if self.is_locked: os.close(self.fd) os.unlink(self.lockfile) self.is_locked = False def __enter__(self): """ Lock gets acquired at the `with` statement. """ if not self.is_locked: self.acquire() return self def __exit__(self, type, value, traceback): """ Lock gets released at the end of the `with` block """ if self.is_locked: self.release() def __del__(self): """ Releases the lock during deletion. """ self.release() ================================================ FILE: mythril/support/model.py ================================================ import logging import os import sys from functools import lru_cache from multiprocessing import TimeoutError from multiprocessing.pool import ThreadPool from pathlib import Path from z3 import sat, unknown from mythril.exceptions import SolverTimeOutException, UnsatError from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.smt import And, Optimize, simplify from mythril.support.support_args import args from mythril.support.support_utils import ModelCache log = logging.getLogger(__name__) model_cache = ModelCache() def solver_worker( constraints, minimize=(), maximize=(), solver_timeout=None, ): """ Returns a model based on given constraints as a tuple :param constraints: Tuple of constraints :param minimize: Tuple of minimization conditions :param maximize: Tuple of maximization conditions :param solver_timeout: The timeout for solver :return: """ s = Optimize() s.set_timeout(solver_timeout) for constraint in constraints: s.add(constraint) for e in minimize: s.minimize(e) for e in maximize: s.maximize(e) if args.solver_log: Path(args.solver_log).mkdir(parents=True, exist_ok=True) constraint_hash_input = tuple( list(constraints) + list(minimize) + list(maximize) + [len(constraints), len(minimize), len(maximize)] ) with open( args.solver_log + f"/{abs(hash(constraint_hash_input))}.smt2", "w" ) as f: f.write(s.sexpr()) result = s.check() return result, s @lru_cache(maxsize=2**23) def get_model( constraints, minimize=(), maximize=(), solver_timeout=None, ): """ Returns a model based on given constraints as a tuple :param constraints: Tuple of constraints :param minimize: Tuple of minimization conditions :param maximize: Tuple of maximization conditions :param solver_timeout: The solver timeout :return: """ solver_timeout = solver_timeout or args.solver_timeout solver_timeout = min(solver_timeout, time_handler.time_remaining()) if solver_timeout <= 0: raise SolverTimeOutException for constraint in constraints: if isinstance(constraint, bool) and not constraint: raise UnsatError if isinstance(constraints, tuple) is False: constraints = constraints.get_all_constraints() constraints = [ constraint for constraint in constraints if isinstance(constraint, bool) is False ] if len(maximize) + len(minimize) == 0: ret_model = model_cache.check_quick_sat(simplify(And(*constraints)).raw) if ret_model: return ret_model pool = ThreadPool(1) try: thread_result = pool.apply_async( solver_worker, args=(constraints, minimize, maximize, solver_timeout) ) try: result, s = thread_result.get(solver_timeout) except TimeoutError: result = unknown except Exception: log.warning("Encountered an exception while solving expression using z3") result = unknown finally: # This is to prevent any segmentation faults from being displayed from z3 sys.stdout = open(os.devnull, "w") sys.stderr = open(os.devnull, "w") pool.terminate() sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ if result == sat: model_cache.model_cache.put(s.model(), 1) return s.model() elif result == unknown: log.debug("Timeout/Error encountered while solving expression using z3") raise SolverTimeOutException raise UnsatError ================================================ FILE: mythril/support/opcodes.py ================================================ from typing import Dict Z_OPERATOR_TUPLE = (0, 1) UN_OPERATOR_TUPLE = (1, 1) BIN_OPERATOR_TUPLE = (2, 1) T_OPERATOR_TUPLE = (3, 1) GAS = "gas" STACK = "stack" ADDRESS = "address" # Gas tuple contains (min_gas, max_gas) # stack tuple contains (no_of_elements_popped, no_of_elements_pushed) # TODO: Make this more specific when TypedDict supports key re-usage. OPCODES: Dict = { "STOP": {GAS: (0, 0), STACK: (0, 0), ADDRESS: 0x00}, "ADD": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x01}, "MUL": {GAS: (5, 5), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x02}, "SUB": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x03}, "DIV": {GAS: (5, 5), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x04}, "SDIV": {GAS: (5, 5), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x05}, "MOD": {GAS: (5, 5), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x06}, "SMOD": {GAS: (5, 5), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x07}, "ADDMOD": {GAS: (8, 8), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x08}, "MULMOD": {GAS: (8, 8), STACK: T_OPERATOR_TUPLE, ADDRESS: 0x09}, "EXP": { GAS: (10, 340), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x0A, }, # exponent max 2^32 "SIGNEXTEND": {GAS: (5, 5), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x0B}, "LT": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x10}, "GT": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x11}, "SLT": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x12}, "SGT": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x13}, "EQ": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x14}, "ISZERO": {GAS: (3, 3), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x15}, "AND": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x16}, "OR": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x17}, "XOR": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x18}, "NOT": {GAS: (3, 3), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x19}, "BYTE": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x1A}, "SHL": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x1B}, "SHR": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x1C}, "SAR": {GAS: (3, 3), STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x1D}, "SHA3": { GAS: ( 30, 30 + 6 * 8, ), # max can be larger, but usually storage location with 8 words STACK: BIN_OPERATOR_TUPLE, ADDRESS: 0x20, }, "ADDRESS": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x30}, "BALANCE": {GAS: (700, 700), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x31}, "ORIGIN": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x32}, "CALLER": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x33}, "CALLVALUE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x34}, "CALLDATALOAD": {GAS: (3, 3), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x35}, "CALLDATASIZE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x36}, "CALLDATACOPY": { GAS: (2, 2 + 3 * 768), # https://ethereum.stackexchange.com/a/47556 STACK: (3, 0), ADDRESS: 0x37, }, "CODESIZE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x38}, "CODECOPY": { GAS: (2, 2 + 3 * 768), # https://ethereum.stackexchange.com/a/47556, STACK: (3, 0), ADDRESS: 0x39, }, "GASPRICE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x3A}, "EXTCODESIZE": {GAS: (700, 700), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x3B}, "EXTCODECOPY": { GAS: (700, 700 + 3 * 768), # https://ethereum.stackexchange.com/a/47556 STACK: (4, 0), ADDRESS: 0x3C, }, "RETURNDATASIZE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x3D}, "RETURNDATACOPY": {GAS: (3, 3), STACK: (3, 0), ADDRESS: 0x3E}, "EXTCODEHASH": {GAS: (700, 700), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x3F}, "BLOCKHASH": {GAS: (20, 20), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x40}, "COINBASE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x41}, "TIMESTAMP": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x42}, "NUMBER": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x43}, "DIFFICULTY": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x44}, "GASLIMIT": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x45}, "CHAINID": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x46}, "SELFBALANCE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x47}, "BASEFEE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x48}, "POP": {GAS: (2, 2), STACK: (1, 0), ADDRESS: 0x50}, # assume 1KB memory r/w cost as upper bound "MLOAD": {GAS: (3, 96), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x51}, "MSTORE": {GAS: (3, 98), STACK: (2, 0), ADDRESS: 0x52}, "MSTORE8": {GAS: (3, 98), STACK: (2, 0), ADDRESS: 0x53}, # assume 64 byte r/w cost as upper bound "SLOAD": {GAS: (800, 800), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x54}, "SSTORE": {GAS: (5000, 25000), STACK: (2, 0), ADDRESS: 0x55}, "JUMP": {GAS: (8, 8), STACK: (1, 0), ADDRESS: 0x56}, "JUMPI": {GAS: (10, 10), STACK: (2, 0), ADDRESS: 0x57}, "PC": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x58}, "MSIZE": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x59}, "GAS": {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x5A}, "JUMPDEST": {GAS: (1, 1), STACK: (0, 0), ADDRESS: 0x5B}, "TLOAD": {GAS: (100, 100), STACK: UN_OPERATOR_TUPLE, ADDRESS: 0x5C}, "TSTORE": {GAS: (100, 100), STACK: (2, 0), ADDRESS: 0x5D}, # apparently Solidity only allows byte32 as input to the log # function. Virtually it could be as large as the block gas limit # allows, but let's stick to the reasonable standard here. # https://ethereum.stackexchange.com/a/1691 "LOG0": {GAS: (375, 375 + 8 * 32), STACK: (2, 0), ADDRESS: 0xA0}, "LOG1": {GAS: (2 * 375, 2 * 375 + 8 * 32), STACK: (3, 0), ADDRESS: 0xA1}, "LOG2": {GAS: (3 * 375, 3 * 375 + 8 * 32), STACK: (4, 0), ADDRESS: 0xA2}, "LOG3": {GAS: (4 * 375, 4 * 375 + 8 * 32), STACK: (5, 0), ADDRESS: 0xA3}, "LOG4": {GAS: (5 * 375, 5 * 375 + 8 * 32), STACK: (6, 0), ADDRESS: 0xA4}, "CREATE": {GAS: (32000, 32000), STACK: T_OPERATOR_TUPLE, ADDRESS: 0xF0}, "CREATE2": { GAS: (32000, 32000), # TODO: Make the gas values dynamic STACK: (4, 1), ADDRESS: 0xF5, }, "CALL": {GAS: (700, 700 + 9000 + 25000), STACK: (7, 1), ADDRESS: 0xF1}, "CALLCODE": {GAS: (700, 700 + 9000 + 25000), STACK: (7, 1), ADDRESS: 0xF2}, "RETURN": {GAS: (0, 0), STACK: (2, 0), ADDRESS: 0xF3}, "DELEGATECALL": {GAS: (700, 700 + 9000 + 25000), STACK: (6, 1), ADDRESS: 0xF4}, "STATICCALL": {GAS: (700, 700 + 9000 + 25000), STACK: (6, 1), ADDRESS: 0xFA}, "REVERT": {GAS: (0, 0), STACK: (2, 0), ADDRESS: 0xFD}, "SELFDESTRUCT": {GAS: (5000, 30000), STACK: (1, 0), ADDRESS: 0xFF}, "INVALID": {GAS: (0, 0), STACK: (0, 0), ADDRESS: 0xFE}, } OPCODES["PUSH0"] = {GAS: (2, 2), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x5F} for i in range(1, 33): OPCODES[f"PUSH{i}"] = {GAS: (3, 3), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x5F + i} for i in range(1, 17): OPCODES[f"DUP{i}"] = {GAS: (3, 3), STACK: (0, 0), ADDRESS: 0x7F + i} OPCODES[f"SWAP{i}"] = {GAS: (3, 3), STACK: Z_OPERATOR_TUPLE, ADDRESS: 0x8F + i} ADDRESS_OPCODE_MAPPING = {} for opcode, opcode_data in OPCODES.items(): ADDRESS_OPCODE_MAPPING[opcode_data[ADDRESS]] = opcode ================================================ FILE: mythril/support/signatures.py ================================================ """The Mythril function signature database.""" import functools import logging import multiprocessing import os import sqlite3 from collections import defaultdict from typing import DefaultDict, Dict, List from mythril.ethereum.util import get_solc_json log = logging.getLogger(__name__) lock = multiprocessing.Lock() def synchronized(sync_lock): """A decorator synchronizing multi-process access to a resource.""" def wrapper(f): """The decorator's core function. :param f: :return: """ @functools.wraps(f) def inner_wrapper(*args, **kw): """ :param args: :param kw: :return: """ with sync_lock: return f(*args, **kw) return inner_wrapper return wrapper class Singleton(type): """A metaclass type implementing the singleton pattern.""" _instances: Dict["Singleton", "Singleton"] = dict() @synchronized(lock) def __call__(cls, *args, **kwargs): """Delegate the call to an existing resource or a new one. This is not thread- or process-safe by default. It must be protected with a lock. :param args: :param kwargs: :return: """ if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class SQLiteDB(object): """Simple context manager for sqlite3 databases. Commits everything at exit. """ def __init__(self, path): """ :param path: """ self.path = path self.conn = None self.cursor = None def __enter__(self): """ :return: """ try: self.conn = sqlite3.connect(self.path) except sqlite3.OperationalError: raise sqlite3.OperationalError(f"Unable to Connect to path {self.path}") self.cursor = self.conn.cursor() return self.cursor def __exit__(self, exc_class, exc, traceback): """ :param exc_class: :param exc: :param traceback: """ self.conn.commit() self.conn.close() def __repr__(self): return "".format(self.path) class SignatureDB(object, metaclass=Singleton): """""" def __init__(self, path: str = None) -> None: """ :param path: """ # if we're analysing a Solidity file, store its hashes # here to prevent unnecessary lookups self.solidity_sigs: DefaultDict[str, List[str]] = defaultdict(list) if path is None: self.path = os.environ.get("MYTHRIL_DIR") or os.path.join( os.path.expanduser("~"), ".mythril" ) self.path = os.path.join(self.path, "signatures.db") log.info("Using signature database at %s", self.path) # NOTE: Creates a new DB file if it doesn't exist already with SQLiteDB(self.path) as cur: cur.execute( ( "CREATE TABLE IF NOT EXISTS signatures" "(byte_sig VARCHAR(10), text_sig VARCHAR(255)," "PRIMARY KEY (byte_sig, text_sig))" ) ) def __getitem__(self, item: str) -> List[str]: """Provide dict interface db[sighash] :param item: 4-byte signature string :return: list of matching text signature strings """ return self.get(byte_sig=item) @staticmethod def _normalize_byte_sig(byte_sig: str) -> str: """Adds a leading 0x to the byte signature if it's not already there. :param byte_sig: 4-byte signature string :return: normalized byte signature string """ if not byte_sig.startswith("0x"): byte_sig = "0x" + byte_sig if not len(byte_sig) == 10: raise ValueError( "Invalid byte signature %s, must have 10 characters", byte_sig ) return byte_sig def add(self, byte_sig: str, text_sig: str) -> None: """ Adds a new byte - text signature pair to the database. :param byte_sig: 4-byte signature string :param text_sig: resolved text signature :return: """ byte_sig = self._normalize_byte_sig(byte_sig) with SQLiteDB(self.path) as cur: # ignore new row if it's already in the DB (and would cause a unique constraint error) cur.execute( "INSERT OR IGNORE INTO signatures (byte_sig, text_sig) VALUES (?,?)", (byte_sig, text_sig), ) def get(self, byte_sig: str, online_timeout: int = 2) -> List[str]: """Get a function text signature for a byte signature 1) try local cache 2) try online lookup (if enabled; if not flagged as unavailable) :param byte_sig: function signature hash as hexstr :param online_timeout: online lookup timeout :return: list of matching function text signatures """ byte_sig = self._normalize_byte_sig(byte_sig) # check if we have any Solidity signatures to look up text_sigs = self.solidity_sigs.get(byte_sig) if text_sigs is not None: return text_sigs # try lookup in the local DB with SQLiteDB(self.path) as cur: cur.execute("SELECT text_sig FROM signatures WHERE byte_sig=?", (byte_sig,)) text_sigs = cur.fetchall() if text_sigs: return [t[0] for t in text_sigs] return [] def import_solidity_file( self, file_path: str, solc_binary: str = "solc", solc_settings_json: str = None ): """Import Function Signatures from solidity source files. :param solc_binary: :param solc_settings_json: :param file_path: solidity source code file path :return: """ solc_json = get_solc_json(file_path, solc_binary, solc_settings_json) self.add_sigs(file_path, solc_json) def add_sigs(self, file_path: str, solc_json): for contract in solc_json["contracts"][file_path].values(): if "methodIdentifiers" not in contract["evm"]: continue for name, hash_ in contract["evm"]["methodIdentifiers"].items(): sig = "0x{}".format(hash_) if sig in self.solidity_sigs: self.solidity_sigs[sig].append(name) else: self.solidity_sigs[sig] = [name] self.add(sig, name) def __repr__(self): return "".format(self.path) ================================================ FILE: mythril/support/source_support.py ================================================ from mythril.ethereum.evmcontract import EVMContract from mythril.solidity.soliditycontract import SolidityContract class Source: """Class to handle to source data""" def __init__(self, source_type=None, source_format=None, source_list=None): """ :param source_type: whether it is a solidity-file or evm-bytecode :param source_format: whether it is bytecode, ethereum-address or text :param source_list: List of files :param meta: meta data """ self.source_type = source_type self.source_format = source_format self.source_list = source_list or [] self._source_hash = [] def get_source_from_contracts_list(self, contracts): """ get the source data from the contracts list :param contracts: the list of contracts :return: """ if contracts is None or len(contracts) == 0: return if isinstance(contracts[0], SolidityContract): self.source_type = "solidity-file" self.source_format = "text" for contract in contracts: self.source_list += [ file.filename for file in contract.solc_indices.values() ] self._source_hash.append(contract.bytecode_hash) self._source_hash.append(contract.creation_bytecode_hash) elif isinstance(contracts[0], EVMContract): self.source_format = "evm-byzantium-bytecode" self.source_type = ( "ethereum-address" if len(contracts[0].name) == 42 and contracts[0].name.startswith("0x") else "raw-bytecode" ) for contract in contracts: if contract.creation_code: self.source_list.append(contract.creation_bytecode_hash) if contract.code: self.source_list.append(contract.bytecode_hash) self._source_hash = self.source_list else: assert False # Fail hard def get_source_index(self, bytecode_hash: str) -> int: """ Find the contract index in the list :param bytecode_hash: The contract hash :return: The index of the contract in the _source_hash list """ # TODO: Add this part to exception logs try: return self._source_hash.index(bytecode_hash) except ValueError: self._source_hash.append(bytecode_hash) return len(self._source_hash) - 1 ================================================ FILE: mythril/support/start_time.py ================================================ from time import time from mythril.support.support_utils import Singleton class StartTime(metaclass=Singleton): """Maintains the start time of the current contract in execution""" def __init__(self): self.global_start_time = time() ================================================ FILE: mythril/support/support_args.py ================================================ from typing import List from mythril.support.support_utils import Singleton class Args(object, metaclass=Singleton): """ This module helps in preventing args being sent through multiple of classes to reach any analysis/laser module """ def __init__(self): self.solver_timeout = 10000 self.pruning_factor = None self.unconstrained_storage = False self.parallel_solving = False self.call_depth_limit = 3 self.disable_iprof = False self.solver_log = None self.transaction_sequences: List[List[str]] = None self.use_integer_module = True self.use_issue_annotations = False self.solc_args = None self.disable_coverage_strategy = False self.disable_mutation_pruner = False self.incremental_txs = True self.enable_summaries = False self.enable_state_merge = False args = Args() ================================================ FILE: mythril/support/support_utils.py ================================================ """This module contains utility functions for the Mythril support package.""" import logging from collections import OrderedDict from copy import deepcopy from functools import lru_cache from typing import Dict from eth_hash.auto import keccak from z3 import is_true log = logging.getLogger(__name__) class Singleton(type): """A metaclass type implementing the singleton pattern.""" _instances: Dict = {} def __call__(cls, *args, **kwargs): """Delegate the call to an existing resource or a new one. This is not thread- or process-safe by default. It must be protected with a lock. :param args: :param kwargs: :return: """ if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class LRUCache: def __init__(self, size): self.size = size self.lru_cache = OrderedDict() def get(self, key): try: value = self.lru_cache.pop(key) self.lru_cache[key] = value return value except KeyError: return -1 def put(self, key, value): try: self.lru_cache.pop(key) except KeyError: if len(self.lru_cache) >= self.size: self.lru_cache.popitem(last=False) self.lru_cache[key] = value class ModelCache: def __init__(self): self.model_cache = LRUCache(size=100) @lru_cache(maxsize=2**10) def check_quick_sat(self, constraints) -> bool: for model in reversed(self.model_cache.lru_cache.keys()): model_copy = deepcopy(model) if is_true(model_copy.eval(constraints, model_completion=True)): self.model_cache.put(model, self.model_cache.get(model) + 1) return model return False def put(self, key, value): self.model_cache.put(key, value) @lru_cache(maxsize=2**10) def get_code_hash(code) -> str: """ :param code: bytecode :return: Returns hash of the given bytecode """ if isinstance(code, tuple): # Temporary hack, since we cannot find symbols of sha3 return str(hash(code)) code = code[2:] if code.startswith("0x") else code try: hash_ = keccak(bytes.fromhex(code)) return "0x" + hash_.hex() except ValueError: log.debug("Unable to change the bytecode to bytes. Bytecode: {}".format(code)) return "" def sha3(value): if isinstance(value, str): if value.startswith("0x"): new_hash = keccak(bytes.fromhex(value)) else: new_hash = keccak(value.encode()) else: new_hash = keccak(value) return new_hash def zpad(x, l): """ Left zero pad value `x` at least to length `l`. """ return b"\x00" * max(0, l - len(x)) + x def rzpad(value, total_length): """ Right zero pad value `x` at least to length `l`. """ return value + b"\x00" * max(0, total_length - len(value)) ================================================ FILE: pyproject.toml ================================================ [tool.ruff] target-version = "py37" [tool.ruff.lint] fixable = ["ALL"] # List of rules https://docs.astral.sh/ruff/rules/ select = ["F", "I"] [tool.ruff.lint.per-file-ignores] # Fine for __init__.py files: # * F401: Module imported but unused # * F403: 'from .module import *' # (resolvable via __all__ list, # see https://docs.python.org/3/tutorial/modules.html#importing-from-a-package) "mythril/**/__init__.py" = ["F401", "F403"] ================================================ FILE: requirements.txt ================================================ blake2b-py>=0.2.0,<1 coloredlogs>=10.0 coincurve>=13.0.0 cytoolz>=0.12.0 asn1crypto>=0.22.0 configparser>=3.5.0 py_ecc>=5.0.0 eth-abi>=5.1.0 eth-hash>=0.3.1,<0.8.0 eth-utils>=2.0.0 hexbytes<1.4.0 jinja2>=2.9 MarkupSafe<3.1.0 mypy-extensions==1.0.0 numpy persistent>=4.2.0 py-flags py-evm==0.10.1b2 py-solc-x<3.0.0 py-solc pyparsing>=2.0.2,<4 requests rlp>=3,<5 semantic_version z3-solver>=4.8.8.0,<=4.13.4.0 matplotlib certifi>=2020.06.20 ================================================ FILE: setup.py ================================================ # -*- coding: utf-8 -*- """install mythril and deploy source-dist and wheel to pypi.python.org. deps (requires up2date version): *) pip install --upgrade pip wheel setuptools twine publish to pypi w/o having to convert Readme.md to RST: 1) #> python setup.py sdist bdist_wheel 2) #> twine upload dist/* #; #optional --repository or --repository-url """ import io import os import sys from setuptools import find_packages, setup from setuptools.command.install import install as _install # Package meta-data. NAME = "mythril" DESCRIPTION = "Security analysis tool for Ethereum smart contracts" URL = "https://github.com/ConsenSys/mythril" AUTHOR = "ConsenSys Dilligence" AUTHOR_MAIL = None REQUIRES_PYTHON = ">=3.7.0" here = os.path.abspath(os.path.dirname(__file__)) # What packages are required for this module to be executed? def get_requirements(): """ Return requirements as list. Handles cases where git links are used. """ with open(os.path.join(here, "requirements.txt")) as f: packages = [] for line in f: line = line.strip() # let's also ignore empty lines and comments if not line or line.startswith("#"): continue if "https://" not in line: packages.append(line) continue rest, package_name = line.split("#egg=")[0], line.split("#egg=")[1] if "-e" in rest: rest = rest.split("-e")[1] package_name = package_name + "@" + rest packages.append(package_name) return packages REQUIRED = get_requirements() TESTS_REQUIRE = ["mypy==0.782", "pytest>=3.6.0", "pytest_mock", "pytest-cov"] # What packages are optional? EXTRAS = {} # If version is set to None then it will be fetched from __version__.py VERSION = None # Import the README and use it as the long-description. # Note: this will only work if 'README.md' is present in your MANIFEST.in file! try: with io.open(os.path.join(here, "README.md"), encoding="utf-8") as f: long_description = "\n" + f.read() except FileNotFoundError: long_description = DESCRIPTION # Load the package's __version__.py module as a dictionary. about = {} if not VERSION: project_slug = NAME.lower().replace("-", "_").replace(" ", "_") with open(os.path.join(here, project_slug, "__version__.py")) as f: exec(f.read(), about) else: about["__version__"] = VERSION # Package version (vX.Y.Z). It must match git tag being used for CircleCI # deployment; otherwise the build will failed. class VerifyVersionCommand(_install): """Custom command to verify that the git tag matches our version.""" description = "verify that the git tag matches our version" def run(self): """""" tag = os.getenv("CIRCLE_TAG") if tag != about["__version__"]: info = "Git tag: {0} does not match the version of this app: {1}".format( tag, about["__version__"] ) sys.exit(info) setup( name=NAME, version=about["__version__"][1:], description=DESCRIPTION, long_description=long_description, long_description_content_type="text/markdown", # requires twine and recent setuptools url=URL, author=AUTHOR, author_mail=AUTHOR_MAIL, license="MIT", classifiers=[ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "Topic :: Software Development :: Disassemblers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ], keywords="hacking disassembler security ethereum", packages=find_packages(exclude=["contrib", "docs", "tests"]), install_requires=REQUIRED, tests_require=TESTS_REQUIRE, python_requires=REQUIRES_PYTHON, extras_require=EXTRAS, package_data={"mythril.analysis.templates": ["*"], "mythril.support.assets": ["*"]}, include_package_data=True, entry_points={"console_scripts": ["myth=mythril.interfaces.cli:main"]}, cmdclass={"verify": VerifyVersionCommand}, ) ================================================ FILE: solidity_examples/BECToken.sol ================================================ /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0 && _value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0 && _value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } /** * @title Pausable token * * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function batchTransfer(address[] memory _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); emit Transfer(msg.sender, _receivers[i], _value); } return true; } } /** * @title Bec Token * * @dev Implementation of Bec Token based on the basic standard token. */ contract BecToken is PausableToken { /** * Public variables of the token * The following variables are OPTIONAL vanities. One does not have to include them. * They allow one to customise the token contract & in no way influences the core functionality. * Some wallets/interfaces might not even bother to look at this information. */ string public name = "BeautyChain"; string public symbol = "BEC"; string public version = '1.0.0'; uint8 public decimals = 18; /** * @dev Function to check the amount of tokens that an owner allowed to a spender. */ constructor() public { totalSupply = 7000000000 * (10**(uint256(decimals))); balances[msg.sender] = totalSupply; // Give the creator all initial tokens } function () external { //if ether is sent to this address, send it back. revert(); } } ================================================ FILE: solidity_examples/WalletLibrary.sol ================================================ //sol Wallet // Multi-sig, daily-limited account proxy/wallet. // @authors: // Gav Wood // inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a // single, or, crucially, each of a number of, designated owners. // usage: // use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by // some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the // interior is executed. pragma solidity 0.5.0; contract WalletEvents { // EVENTS // this contract only has six types of events: it can accept a confirmation, in which case // we record owner and operation (hash) alongside it. event Confirmation(address owner, bytes32 operation); event Revoke(address owner, bytes32 operation); // some others are in the case of an owner changing. event OwnerChanged(address oldOwner, address newOwner); event OwnerAdded(address newOwner); event OwnerRemoved(address oldOwner); // the last one is emitted if the required signatures change event RequirementChanged(uint newRequirement); // Funds has arrived into the wallet (record how much). event Deposit(address _from, uint value); // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going). event SingleTransact(address owner, uint value, address to, bytes data, address created); // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going). event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data, address created); // Confirmation still needed for a transaction. event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data); } contract WalletAbi { // Revokes a prior confirmation of the given operation function revoke(bytes32 _operation) external; // Replaces an owner `_from` with another `_to`. function changeOwner(address _from, address _to) external; function addOwner(address _owner) external; function removeOwner(address _owner) external; function changeRequirement(uint _newRequired) external; function isOwner(address _addr) public returns (bool); function hasConfirmed(bytes32 _operation, address _owner) external returns (bool); // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. function setDailyLimit(uint _newLimit) external; function execute(address _to, uint _value, bytes calldata _data) external returns (bytes32 o_hash); function confirm(bytes32 _h) public returns (bool o_success); } contract WalletLibrary is WalletEvents { // TYPES // struct for the status of a pending operation. struct PendingState { uint yetNeeded; uint ownersDone; uint index; } // Transaction structure to remember details of transaction lest it need be saved for a later call. struct Transaction { address to; uint value; bytes data; } // MODIFIERS // simple single-sig function modifier. modifier onlyowner { if (isOwner(msg.sender)) _; } // multi-sig function modifier: the operation must have an intrinsic hash in order // that later attempts can be realised as the same underlying operation and // thus count as confirmations. modifier onlymanyowners(bytes32 _operation) { if (confirmAndCheck(_operation)) _; } // METHODS // gets called when no other function matches function() external payable { // just being sent some cash? if (msg.value > 0) emit Deposit(msg.sender, msg.value); } // constructor is given number of sigs required to do protected "onlymanyowners" transactions // as well as the selection of addresses capable of confirming them. function initMultiowned(address[] memory _owners, uint _required) public only_uninitialized { m_numOwners = _owners.length + 1; m_owners[1] = uint(msg.sender); m_ownerIndex[uint(msg.sender)] = 1; for (uint i = 0; i < _owners.length; ++i) { m_owners[2 + i] = uint(_owners[i]); m_ownerIndex[uint(_owners[i])] = 2 + i; } m_required = _required; } // Revokes a prior confirmation of the given operation function revoke(bytes32 _operation) external { uint ownerIndex = m_ownerIndex[uint(msg.sender)]; // make sure they're an owner if (ownerIndex == 0) return; uint ownerIndexBit = 2**ownerIndex; PendingState memory pending = m_pending[_operation]; if (pending.ownersDone & ownerIndexBit > 0) { pending.yetNeeded++; pending.ownersDone -= ownerIndexBit; emit Revoke(msg.sender, _operation); } } // Replaces an owner `_from` with another `_to`. function changeOwner(address _from, address _to) onlymanyowners(keccak256(msg.data)) external { if (isOwner(_to)) return; uint ownerIndex = m_ownerIndex[uint(_from)]; if (ownerIndex == 0) return; clearPending(); m_owners[ownerIndex] = uint(_to); m_ownerIndex[uint(_from)] = 0; m_ownerIndex[uint(_to)] = ownerIndex; emit OwnerChanged(_from, _to); } function addOwner(address _owner) onlymanyowners(keccak256(msg.data)) external { if (isOwner(_owner)) return; clearPending(); if (m_numOwners >= c_maxOwners) reorganizeOwners(); if (m_numOwners >= c_maxOwners) return; m_numOwners++; m_owners[m_numOwners] = uint(_owner); m_ownerIndex[uint(_owner)] = m_numOwners; emit OwnerAdded(_owner); } function removeOwner(address _owner) onlymanyowners(keccak256(msg.data)) external { uint ownerIndex = m_ownerIndex[uint(_owner)]; if (ownerIndex == 0) return; if (m_required > m_numOwners - 1) return; m_owners[ownerIndex] = 0; m_ownerIndex[uint(_owner)] = 0; clearPending(); reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot emit OwnerRemoved(_owner); } function changeRequirement(uint _newRequired) onlymanyowners(keccak256(msg.data)) external { if (_newRequired > m_numOwners) return; m_required = _newRequired; clearPending(); emit RequirementChanged(_newRequired); } // Gets an owner by 0-indexed position (using numOwners as the count) function getOwner(uint ownerIndex) external view returns (address) { return address(m_owners[ownerIndex + 1]); } function isOwner(address _addr) public view returns (bool) { return m_ownerIndex[uint(_addr)] > 0; } function hasConfirmed(bytes32 _operation, address _owner) external view returns (bool) { PendingState memory pending = m_pending[_operation]; uint ownerIndex = m_ownerIndex[uint(_owner)]; // make sure they're an owner if (ownerIndex == 0) return false; // determine the bit to set for this owner. uint ownerIndexBit = 2**ownerIndex; return !(pending.ownersDone & ownerIndexBit == 0); } // constructor - stores initial daily limit and records the present day's index. function initDaylimit(uint _limit) public only_uninitialized { m_dailyLimit = _limit; m_lastDay = today(); } // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. function setDailyLimit(uint _newLimit) onlymanyowners(keccak256(msg.data)) external { m_dailyLimit = _newLimit; } // resets the amount already spent today. needs many of the owners to confirm. function resetSpentToday() onlymanyowners(keccak256(msg.data)) external { m_spentToday = 0; } // throw unless the contract is not yet initialized. modifier only_uninitialized { require(m_numOwners == 0); _; } // constructor - just pass on the owner array to the multiowned and // the limit to daylimit function initWallet(address[] memory _owners, uint _required, uint _daylimit) public only_uninitialized { initDaylimit(_daylimit); initMultiowned(_owners, _required); } // kills the contract sending everything to `_to`. function kill(address payable _to) onlymanyowners(keccak256(msg.data)) external { selfdestruct(_to); } // Outside-visible transact entry point. Executes transaction immediately if below daily spend limit. // If not, goes into multisig process. We provide a hash on return to allow the sender to provide // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value // and _data arguments). They still get the option of using them if they want, anyways. function execute(address _to, uint _value, bytes calldata _data) external onlyowner returns (bytes32 o_hash) { // first, take the opportunity to check that we're under the daily limit. if ((_data.length == 0 && underLimit(_value)) || m_required == 1) { // yes - just execute the call. address created; if (_to == address(0)) { created = create(_value, _data); } else { (bool success, bytes memory data) = _to.call.value(_value)(_data); require(success); } emit SingleTransact(msg.sender, _value, _to, _data, created); } else { // determine our operation hash. o_hash = keccak256(abi.encode(msg.data, block.number)); // store if it's new if (m_txs[o_hash].to == address(0) && m_txs[o_hash].value == 0 && m_txs[o_hash].data.length == 0) { m_txs[o_hash].to = _to; m_txs[o_hash].value = _value; m_txs[o_hash].data = _data; } if (!confirm(o_hash)) { emit ConfirmationNeeded(o_hash, msg.sender, _value, _to, _data); } } } function create(uint _value, bytes memory _code) internal returns (address o_addr) { uint256 o_size; assembly { o_addr := create(_value, add(_code, 0x20), mload(_code)) o_size := extcodesize(o_addr) } require(o_size != 0); } // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order // to determine the body of the transaction from the hash provided. function confirm(bytes32 _h) public onlymanyowners(_h) returns (bool o_success) { if (m_txs[_h].to != address(0) || m_txs[_h].value != 0 || m_txs[_h].data.length != 0) { address created; if (m_txs[_h].to == address(0)) { created = create(m_txs[_h].value, m_txs[_h].data); } else { (bool success, bytes memory data) = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data); require(success); } emit MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data, created); delete m_txs[_h]; return true; } } // INTERNAL METHODS function confirmAndCheck(bytes32 _operation) internal returns (bool) { // determine what index the present sender is: uint ownerIndex = m_ownerIndex[uint(msg.sender)]; // make sure they're an owner if (ownerIndex == 0) return false; PendingState memory pending = m_pending[_operation]; // if we're not yet working on this operation, switch over and reset the confirmation status. if (pending.yetNeeded == 0) { // reset count of confirmations needed. pending.yetNeeded = m_required; // reset which owners have confirmed (none) - set our bitmap to 0. pending.ownersDone = 0; pending.index = m_pendingIndex.length++; m_pendingIndex[pending.index] = _operation; } // determine the bit to set for this owner. uint ownerIndexBit = 2**ownerIndex; // make sure we (the message sender) haven't confirmed this operation previously. if (pending.ownersDone & ownerIndexBit == 0) { emit Confirmation(msg.sender, _operation); // ok - check if count is enough to go ahead. if (pending.yetNeeded <= 1) { // enough confirmations: reset and run interior. delete m_pendingIndex[m_pending[_operation].index]; delete m_pending[_operation]; return true; } else { // not enough: record that this owner in particular confirmed. pending.yetNeeded--; pending.ownersDone |= ownerIndexBit; } } } function reorganizeOwners() private { uint free = 1; while (free < m_numOwners) { while (free < m_numOwners && m_owners[free] != 0) free++; while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--; if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0) { m_owners[free] = m_owners[m_numOwners]; m_ownerIndex[m_owners[free]] = free; m_owners[m_numOwners] = 0; } } } // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and // returns true. otherwise just returns false. function underLimit(uint _value) internal onlyowner returns (bool) { // reset the spend limit if we're on a different day to last time. if (today() > m_lastDay) { m_spentToday = 0; m_lastDay = today(); } // check to see if there's enough left - if so, subtract and return true. // overflow protection // dailyLimit check if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) { m_spentToday += _value; return true; } return false; } // determines today's index. function today() private view returns (uint) { return now / 1 days; } function clearPending() internal { uint length = m_pendingIndex.length; for (uint i = 0; i < length; ++i) { delete m_txs[m_pendingIndex[i]]; if (m_pendingIndex[i] != 0) delete m_pending[m_pendingIndex[i]]; } delete m_pendingIndex; } // FIELDS address _walletLibrary = 0xCAfEcAfeCAfECaFeCaFecaFecaFECafECafeCaFe; // the number of owners that must confirm the same operation before it is run. uint public m_required; // pointer used to find a free slot in m_owners uint public m_numOwners; uint public m_dailyLimit; uint public m_spentToday; uint public m_lastDay; // list of owners uint[256] m_owners; uint c_maxOwners = 250; // index on the list of owners to allow reverse lookup mapping(uint => uint) m_ownerIndex; // the ongoing operations. mapping(bytes32 => PendingState) m_pending; bytes32[] m_pendingIndex; // pending transactions we have at present. mapping (bytes32 => Transaction) m_txs; } ================================================ FILE: solidity_examples/calls.sol ================================================ contract Caller { address public fixed_address; address public stored_address; uint256 statevar; constructor(address addr) public { fixed_address = addr; } function thisisfine() public { fixed_address.call(""); } function reentrancy() public { fixed_address.call(""); statevar = 0; } function calluseraddress(address addr) public { addr.call(""); } function callstoredaddress() public { stored_address.call(""); } function setstoredaddress(address addr) public { stored_address = addr; } } ================================================ FILE: solidity_examples/etherstore.sol ================================================ pragma solidity 0.5.0; contract EtherStore { uint256 public withdrawalLimit = 1 ether; mapping(address => uint256) public lastWithdrawTime; mapping(address => uint256) public balances; function depositFunds() public payable { balances[msg.sender] += msg.value; } function withdrawFunds (uint256 _weiToWithdraw) public { require(balances[msg.sender] >= _weiToWithdraw); // limit the withdrawal require(_weiToWithdraw <= withdrawalLimit); // limit the time allowed to withdraw require(now >= lastWithdrawTime[msg.sender] + 1 weeks); (bool success, bytes memory data) = msg.sender.call.value(_weiToWithdraw)(""); require(success); balances[msg.sender] -= _weiToWithdraw; lastWithdrawTime[msg.sender] = now; } } ================================================ FILE: solidity_examples/exceptions.sol ================================================ contract Exceptions { uint256[8] myarray; function assert1() public pure { uint256 i = 1; assert(i == 0); } function assert2() public pure { uint256 i = 1; assert(i > 0); } function assert3(uint256 input) public pure { assert(input != 23); } function requireisfine(uint256 input) public pure { require(input != 23); } function divisionby0(uint256 input) public pure { uint256 i = 1/input; } function thisisfine(uint256 input) public pure { if (input > 0) { uint256 i = 1/input; } } function arrayaccess(uint256 index) public view { uint256 i = myarray[index]; } function thisisalsofind(uint256 index) public view { if (index < 8) { uint256 i = myarray[index]; } } } ================================================ FILE: solidity_examples/hashforether.sol ================================================ pragma solidity 0.5.0; contract HashForEther { function withdrawWinnings() public payable { // Winner if the last 8 hex characters of the address are 0. if (uint32(msg.sender) == 0) _sendWinnings(); } function _sendWinnings() public { msg.sender.transfer(address(this).balance); } } ================================================ FILE: solidity_examples/killbilly.sol ================================================ pragma solidity 0.5.7; contract KillBilly { bool public is_killable; mapping (address => bool) public approved_killers; constructor() public { is_killable = false; } function killerize(address addr) public { approved_killers[addr] = true; } function activatekillability() public { require(approved_killers[msg.sender] == true); is_killable = true; } function commencekilling() public { require(is_killable); selfdestruct(msg.sender); } } ================================================ FILE: solidity_examples/origin.sol ================================================ pragma solidity 0.5.0; contract Origin { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(tx.origin != owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } ================================================ FILE: solidity_examples/returnvalue.sol ================================================ pragma solidity 0.5.0; contract ReturnValue { address public callee = 0xE0f7e56E62b4267062172495D7506087205A4229; function callnotchecked() public { callee.call(""); } function callchecked() public { (bool success, bytes memory data) = callee.call(""); require(success); } } ================================================ FILE: solidity_examples/rubixi.sol ================================================ pragma solidity 0.5.0; contract Rubixi { //Declare variables for storage critical to contract uint private balance = 0; uint private collectedFees = 0; uint private feePercent = 10; uint private pyramidMultiplier = 300; uint private payoutOrder = 0; address payable private creator; modifier onlyowner { if (msg.sender == creator) _; } struct Participant { address payable etherAddress; uint payout; } //Fallback function function() external payable { init(); } //Sets creator function dynamicPyramid() public { creator = msg.sender; } Participant[] private participants; //Fee functions for creator function collectAllFees() public onlyowner { require(collectedFees > 0); creator.transfer(collectedFees); collectedFees = 0; } function collectFeesInEther(uint _amt) public onlyowner { _amt *= 1 ether; if (_amt > collectedFees) collectAllFees(); require(collectedFees > 0); creator.transfer(_amt); collectedFees -= _amt; } function collectPercentOfFees(uint _pcent) public onlyowner { require(collectedFees > 0 && _pcent <= 100); uint feesToCollect = collectedFees / 100 * _pcent; creator.transfer(feesToCollect); collectedFees -= feesToCollect; } //Functions for changing variables related to the contract function changeOwner(address payable _owner) public onlyowner { creator = _owner; } function changeMultiplier(uint _mult) public onlyowner { require(_mult <= 300 && _mult >= 120); pyramidMultiplier = _mult; } function changeFeePercentage(uint _fee) public onlyowner { require(_fee <= 10); feePercent = _fee; } //Functions to provide information to end-user using JSON interface or other interfaces function currentMultiplier() public view returns (uint multiplier, string memory info) { multiplier = pyramidMultiplier; info = "This multiplier applies to you as soon as transaction is received, may be lowered to hasten payouts or increased if payouts are fast enough. Due to no float or decimals, multiplier is x100 for a fractional multiplier e.g. 250 is actually a 2.5x multiplier. Capped at 3x max and 1.2x min."; } function currentFeePercentage() public view returns (uint fee, string memory info) { fee = feePercent; info = "Shown in % form. Fee is halved(50%) for amounts equal or greater than 50 ethers. (Fee may change, but is capped to a maximum of 10%)"; } function currentPyramidBalanceApproximately() public view returns (uint pyramidBalance, string memory info) { pyramidBalance = balance / 1 ether; info = "All balance values are measured in Ethers, note that due to no decimal placing, these values show up as integers only, within the contract itself you will get the exact decimal value you are supposed to"; } function nextPayoutWhenPyramidBalanceTotalsApproximately() public view returns (uint balancePayout) { balancePayout = participants[payoutOrder].payout / 1 ether; } function feesSeperateFromBalanceApproximately() public view returns (uint fees) { fees = collectedFees / 1 ether; } function totalParticipants() public view returns (uint count) { count = participants.length; } function numberOfParticipantsWaitingForPayout() public view returns (uint count) { count = participants.length - payoutOrder; } function participantDetails(uint orderInPyramid) public view returns (address addr, uint payout) { if (orderInPyramid <= participants.length) { addr = participants[orderInPyramid].etherAddress; payout = participants[orderInPyramid].payout / 1 ether; } } //init function run on fallback function init() private { //Ensures only tx with value of 1 ether or greater are processed and added to pyramid if (msg.value < 1 ether) { collectedFees += msg.value; return; } uint _fee = feePercent; // 50% fee rebate on any ether value of 50 or greater if (msg.value >= 50 ether) _fee /= 2; addPayout(_fee); } //Function called for valid tx to the contract function addPayout(uint _fee) private { //Adds new address to participant array participants.push(Participant(msg.sender, (msg.value * pyramidMultiplier) / 100)); // These statements ensure a quicker payout system to // later pyramid entrants, so the pyramid has a longer lifespan if (participants.length == 10) pyramidMultiplier = 200; else if (participants.length == 25) pyramidMultiplier = 150; // collect fees and update contract balance balance += (msg.value * (100 - _fee)) / 100; collectedFees += (msg.value * _fee) / 100; //Pays earlier participants if balance sufficient while (balance > participants[payoutOrder].payout) { uint payoutToSend = participants[payoutOrder].payout; participants[payoutOrder].etherAddress.transfer(payoutToSend); balance -= participants[payoutOrder].payout; payoutOrder += 1; } } } ================================================ FILE: solidity_examples/suicide.sol ================================================ contract Suicide { function kill(address payable addr) public { if (addr == address(0x0)) { selfdestruct(addr); } } } ================================================ FILE: solidity_examples/timelock.sol ================================================ pragma solidity 0.5.0; contract TimeLock { mapping(address => uint) public balances; mapping(address => uint) public lockTime; function deposit() public payable { balances[msg.sender] += msg.value; lockTime[msg.sender] = now + 1 weeks; } function increaseLockTime(uint _secondsToIncrease) public { lockTime[msg.sender] += _secondsToIncrease; } function withdraw() public { require(balances[msg.sender] > 0); require(now > lockTime[msg.sender]); balances[msg.sender] = 0; msg.sender.transfer(balances[msg.sender]); } } ================================================ FILE: solidity_examples/token.sol ================================================ contract Token { mapping(address => uint) balances; uint public totalSupply; constructor(uint _initialSupply) public { balances[msg.sender] = totalSupply = _initialSupply; } function transfer(address _to, uint _value) public returns (bool) { require(balances[msg.sender] - _value >= 0); balances[msg.sender] -= _value; balances[_to] += _value; return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } } ================================================ FILE: solidity_examples/weak_random.sol ================================================ pragma solidity 0.5.0; contract WeakRandom { struct Contestant { address payable addr; uint gameId; } uint public prize = 2.5 ether; uint public totalTickets = 50; uint public pricePerTicket = prize / totalTickets; uint public gameId = 1; uint public nextTicket = 0; mapping (uint => Contestant) public contestants; function () payable external { uint moneySent = msg.value; while (moneySent >= pricePerTicket && nextTicket < totalTickets) { uint currTicket = nextTicket++; contestants[currTicket] = Contestant(msg.sender, gameId); moneySent -= pricePerTicket; } if (nextTicket == totalTickets) { chooseWinner(); } // Send back leftover money if (moneySent > 0) { msg.sender.transfer(moneySent); } } function chooseWinner() private { address seed1 = contestants[uint(block.coinbase) % totalTickets].addr; address seed2 = contestants[uint(msg.sender) % totalTickets].addr; uint seed3 = block.difficulty; bytes32 randHash = keccak256(abi.encode(seed1, seed2, seed3)); uint winningNumber = uint(randHash) % totalTickets; address payable winningAddress = contestants[winningNumber].addr; gameId++; nextTicket = 0; winningAddress.transfer(prize); } } ================================================ FILE: static/Ownable.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM


================================================ FILE: static/assertions.html ================================================ Call Graph

Mythril / LASER Symbolic VM


================================================ FILE: static/mythril.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM


================================================ FILE: static/sample_report.md ================================================ # Analysis Results ## Ether send - Type: Warning - Contract: Crowdfunding - Function name: withdrawfunds() - PC address: 816 ### Description In the function `withdrawfunds()` a non-zero amount of Ether is sent to msg.sender. Call value is balance_at_1461501637330902918203684832716283019655932542975 & address. There is a check on storage index 7. This storage slot can be written to by calling the function `crowdfunding()`. In *ether_send.sol:* ``` msg.sender.transfer(this.balance) ``` ## Use of tx.origin - Type: Warning - Contract: Origin - Function name: transferOwnership(address) - PC address: 317 ### Description Function transferOwnership(address) retrieves the transaction origin (tx.origin) using the ORIGIN opcode. Use tx.sender instead. See also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin In *origin.sol:* ``` tx.origin ``` ## CALL with gas to dynamic address - Type: Warning - Contract: Reentrancy - Function name: withdraw(uint256) - PC address: 552 ### Description The function withdraw(uint256) contains a function call to the address of the transaction sender. The available gas is forwarded to the called contract. Make sure that the logic of the calling contract is not adversely affected if the called contract misbehaves (e.g. reentrancy). In *reentrancy.sol:* ``` msg.sender.call.value(_amount)() ``` ## Unchecked CALL return value - Type: Informational - Contract: Reentrancy - Function name: withdraw(uint256) - PC address: 552 ### Description The function withdraw(uint256) contains a call to msg.sender. The return value of this call is not checked. Note that the function will continue to execute with a return value of '0' if the called contract throws. In *reentrancy.sol:* ``` msg.sender.call.value(_amount)() ``` ## Integer Underflow - Type: Warning - Contract: Under - Function name: sendeth(address,uint256) - PC address: 649 ### Description A possible integer underflow exists in the function `sendeth(address,uint256)`. The SUB instruction at address 649 may result in a value < 0. In *underflow.sol:* ``` balances[msg.sender] -= _value ``` ## Integer Underflow - Type: Warning - Contract: Under - Function name: sendeth(address,uint256) - PC address: 567 ### Description A possible integer underflow exists in the function `sendeth(address,uint256)`. The SUB instruction at address 567 may result in a value < 0. In *underflow.sol:* ``` balances[msg.sender] - _value ``` ## Weak random - Type: Warning - Contract: WeakRandom - Function name: _function_0xe9874106 - PC address: 1285 ### Description In the function `_function_0xe9874106` the following predictable state variables are used to determine Ether recipient: - block.coinbase In *weak_random.sol:* ``` winningAddress.transfer(prize) ``` ================================================ FILE: tests/__init__.py ================================================ from pathlib import Path from unittest import TestCase TESTS_DIR = Path(__file__).parent PROJECT_DIR = TESTS_DIR.parent TESTDATA = TESTS_DIR / "testdata" TESTDATA_INPUTS = TESTDATA / "inputs" TESTDATA_INPUTS_CONTRACTS = TESTDATA / "input_contracts" TESTDATA_OUTPUTS_EXPECTED = TESTDATA / "outputs_expected" TESTDATA_OUTPUTS_CURRENT = TESTDATA / "outputs_current" TESTDATA_OUTPUTS_CURRENT_LASER_RESULT = TESTDATA / "outputs_current_laser_result" TESTDATA_OUTPUTS_EXPECTED_LASER_RESULT = TESTDATA / "outputs_expected_laser_result" MYTHRIL_DIR = TESTS_DIR / "mythril_dir" TESTDATA_OUTPUTS_CURRENT.mkdir(exist_ok=True) TESTDATA_OUTPUTS_CURRENT_LASER_RESULT.mkdir(exist_ok=True) class BaseTestCase(TestCase): def setUp(self): """""" self.changed_files = [] def compare_files_error_message(self): """ :return: """ message = "Following output files are changed, compare them manually to see differences: \n" for input_file, expected, current in self.changed_files: message += "{}:\n".format(input_file.name) message += "- {}\n".format(str(expected)) message += "- {}\n".format(str(current)) return message def found_changed_files(self, input_file, output_expected, output_current): """ :param input_file: :param output_expected: :param output_current: """ self.changed_files.append((input_file, output_expected, output_current)) def assert_and_show_changed_files(self): """""" self.assertEqual( 0, len(self.changed_files), msg=self.compare_files_error_message() ) ================================================ FILE: tests/analysis/abi_decode_test.py ================================================ import pytest from mythril.analysis.report import Issue test_data = ( ( "0xa9059cbb000000000000000000000000010801010101010120020101020401010408040402", "func(uint256,uint256)", ( 5887484186314823854737699484601117092168074244, 904625697166532776746648320380374280103671755200316906558262375061821325312, ), ), ( "0xa9059cbb00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002", "func(uint256,uint256)", (2, 2), ), # location + length + data ( "0xa9059cbb" + "0" * 62 + "20" + "0" * 63 + "1" + "0" * 63 + "2", "func(uint256[])", ((2,),), ), ) @pytest.mark.parametrize("call_data, signature, expected", test_data) def test_abi_decode(call_data, signature, expected): assert Issue.resolve_input(call_data, signature) == expected ================================================ FILE: tests/analysis/arbitrary_jump_test.py ================================================ import pytest from mythril.analysis.module.modules.arbitrary_jump import ( ArbitraryJump, is_unique_jumpdest, ) from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.call import SymbolicCalldata from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.constraints import Constraints from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.symbolic import ACTORS from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import symbol_factory def get_global_state(constraints): """Constructs an arbitrary global state Args: constraints (List[BitVec]): Constraints list for the global state Returns: [GlobalState]: An arbitrary global state """ active_account = Account("0x0", code=Disassembly("60606040")) environment = Environment( active_account, None, SymbolicCalldata("2"), None, None, None, None ) world_state = WorldState() world_state.put_account(active_account) state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) state.world_state.transaction_sequence = [ MessageCallTransaction( world_state=world_state, gas_limit=8000000, init_call_data=True, call_value=symbol_factory.BitVecSym("call_value", 256), caller=ACTORS.attacker, callee_account=active_account, ) ] state.transaction_stack.append( ( MessageCallTransaction( world_state=world_state, gas_limit=8000000, init_call_data=True ), None, ) ) state.mstate.stack = [symbol_factory.BitVecSym("jump_dest", 256)] state.world_state.constraints = Constraints(constraints) return state test_data = ( ( get_global_state([symbol_factory.BitVecSym("jump_dest", 256) == 222]), True, ), ( get_global_state([symbol_factory.BitVecSym("jump_dest", 256) > 222]), False, ), ) @pytest.mark.parametrize("global_state, unique", test_data) def test_unique_jumpdest(global_state, unique): time_handler.start_execution(10) assert is_unique_jumpdest(global_state.mstate.stack[-1], global_state) == unique test_data = ( ( get_global_state([symbol_factory.BitVecSym("jump_dest", 256) == 222]), False, ), ( get_global_state([symbol_factory.BitVecSym("jump_dest", 256) > 222]), True, ), ) @pytest.mark.parametrize("global_state, has_issue", test_data) def test_module(global_state, has_issue): time_handler.start_execution(10) module = ArbitraryJump() assert (len(module._analyze_state(global_state)) > 0) == has_issue ================================================ FILE: tests/cli_tests/cli_opts_test.py ================================================ import json import sys import pytest from mythril.interfaces.cli import main def test_version_opt(capsys): # Check that "myth --version" returns a string with the word # "version" in it sys.argv = ["mythril", "version"] with pytest.raises(SystemExit) as pytest_wrapped_e: main() assert pytest_wrapped_e.type == SystemExit captured = capsys.readouterr() assert captured.out.find(" version ") >= 1 # Check that "myth --version -o json" returns a JSON object sys.argv = ["mythril", "version", "-o", "json"] with pytest.raises(SystemExit) as pytest_wrapped_e: main() assert pytest_wrapped_e.type == SystemExit captured = capsys.readouterr() d = json.loads(captured.out) assert isinstance(d, dict) assert d["version_str"] ================================================ FILE: tests/cmd_line_test.py ================================================ from subprocess import STDOUT, CalledProcessError, check_output from tests import PROJECT_DIR, TESTDATA, BaseTestCase MYTH = str(PROJECT_DIR / "myth") def output_of(command): """ :param command: :return: """ try: return check_output(command, shell=True).decode("UTF-8") except CalledProcessError as exc: return exc.output.decode("UTF-8") def total_output(command): try: return check_output(command, shell=True, stderr=STDOUT).decode("UTF-8") except CalledProcessError as exc: return exc.output.decode("UTF-8") class CommandLineToolTestCase(BaseTestCase): def test_disassemble_code_correctly(self): command = "python3 {} disassemble --bin-runtime -c 0x5050".format(MYTH) self.assertIn("0 POP\n1 POP\n", output_of(command)) def test_disassemble_solidity_file_correctly(self): solidity_file = str(TESTDATA / "input_contracts" / "metacoin.sol") command = "python3 {} disassemble {} --solv 0.5.0".format(MYTH, solidity_file) self.assertIn("2 PUSH1 0x40\n4 MSTORE", output_of(command)) def test_hash_a_function_correctly(self): command = "python3 {} function-to-hash 'setOwner(address)'".format(MYTH) self.assertIn("0x13af4035\n", output_of(command)) def test_failure_json(self): command = "python3 {} analyze doesnt_exist.sol -o json".format(MYTH) print(output_of(command)) self.assertIn(""""success": false""", output_of(command)) def test_failure_text(self): command = "python3 {} analyze doesnt_exist.sol".format(MYTH) assert output_of(command) == "" def test_failure_jsonv2(self): command = "python3 {} analyze doesnt_exist.sol -o jsonv2".format(MYTH) self.assertIn(""""level": "error""" "", output_of(command)) def test_analyze(self): solidity_file = str(TESTDATA / "input_contracts" / "origin.sol") command = "python3 {} analyze {} --solv 0.5.0".format(MYTH, solidity_file) self.assertIn("115", output_of(command)) def test_analyze_bytecode(self): solidity_file = str(TESTDATA / "inputs" / "origin.sol.o") command = "python3 {} analyze --bin-runtime -f {}".format(MYTH, solidity_file) self.assertIn("115", output_of(command)) def test_invalid_args_iprof(self): solidity_file = str(TESTDATA / "input_contracts" / "origin.sol") command = "python3 {} analyze {} --enable-iprof -o json".format( MYTH, solidity_file ) self.assertIn("""unrecognized arguments""", total_output(command)) def test_only_epic(self): command = "python3 {} --epic".format(MYTH) # Just check for crashes output_of(command) '''' def test_storage(self): command = """python3 {} read-storage "438767356, 3" 0x76799f77587738bfeef09452df215b63d2cfb08a """.format( MYTH ) self.assertIn("0x1a270efc", output_of(command)) ''' """ class InfuraTestCase(BaseTestCase): def test_infura_mainnet(self): command = "python3 {} disassemble --rpc infura-mainnet -a 0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208".format( MYTH ) output = output_of(command) self.assertIn("0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE", output) self.assertIn("7278 POP\n7279 POP\n7280 JUMP\n7281 STOP", output) def test_infura_rinkeby(self): command = "python3 {} disassemble --rpc infura-rinkeby -a 0xB6f2bFED892a662bBF26258ceDD443f50Fa307F5".format( MYTH ) output = output_of(command) self.assertIn("34 JUMPDEST\n35 CALLVALUE", output) def test_infura_kovan(self): command = "python3 {} disassemble --rpc infura-kovan -a 0xE6bBF9B5A3451242F82f8cd458675092617a1235".format( MYTH ) output = output_of(command) self.assertIn("9999 PUSH1 0x00\n10001 NOT\n10002 AND\n10003 PUSH1 0x00", output) def test_infura_ropsten(self): command = "python3 {} disassemble --rpc infura-ropsten -a 0x6e0E0e02377Bc1d90E8a7c21f12BA385C2C35f78".format( MYTH ) output = output_of(command) self.assertIn("1821 PUSH1 0x01\n1823 PUSH2 0x070c", output) """ ================================================ FILE: tests/concolic/concolic_tests.py ================================================ import binascii import json import subprocess from copy import deepcopy from datetime import datetime from subprocess import CalledProcessError, check_output import pytest from mythril.concolic import concrete_execution from mythril.concolic.find_trace import setup_concrete_initial_state from mythril.laser.ethereum import util from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.concolic import execute_transaction from mythril.laser.plugin.loader import LaserPluginLoader from mythril.laser.plugin.plugins import TraceFinderBuilder from mythril.laser.smt import symbol_factory from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") def output_of(command): try: return json.loads(check_output(command, shell=True).decode("UTF-8")) except CalledProcessError as exc: return json.loads(exc.output.decode("UTF-8")) # TODO: Try using some python EVM for these tests def validate_simple_example(output, branches): for branch_output, branch in zip(output, branches): if branch == "153": # Validation for initialState # Validation for tx steps tx_step = branch_output["steps"][1] assert tx_step["input"] == tx_step["calldata"] assert int(tx_step["input"][10:], 16) == 3 def validate_multiple_example(output, branches): for branch_output, branch in zip(output, branches): if branch == "153": # Validation for initialState # Validation for tx steps tx_step = branch_output["steps"][1] assert tx_step["input"] == tx_step["calldata"] assert int(tx_step["input"][10:], 16) == 3 elif branch == "192": # Validation for initialState # Validation for tx steps tx_step = branch_output["steps"][1] assert tx_step["input"] == tx_step["calldata"] assert int(tx_step["input"][10:], 16) == 5 elif branch == "243": # Validation for initialState # Validation for tx steps tx_step = branch_output["steps"][1] assert tx_step["input"] == tx_step["calldata"] assert int(tx_step["input"][10:], 16) == 7 def validate_two_contract(output, branches): for branch_output, branch in zip(output, branches): if branch == "311": # Validation for initialState # Validation for tx steps assert ( int(branch_output["steps"][1]["input"][10:], 16) + int(branch_output["steps"][3]["input"][10:], 16) == 11 ) if branch == "341": # Validation for initialState # Validation for tx steps assert ( int(branch_output["steps"][1]["input"][10:], 16) + int(branch_output["steps"][3]["input"][10:], 16) == 30 ) if branch == "371": # Validation for initialState # Validation for tx steps assert ( int(branch_output["steps"][1]["input"][10:], 16) + int(branch_output["steps"][3]["input"][10:], 16) == 20 ) def validate_multi_contract(output, branches): for branch_output, branch in zip(output, branches): if branch == "453": # Validation for initialState # Validation for tx steps assert ( int(branch_output["steps"][1]["input"][10:], 16) + int(branch_output["steps"][3]["input"][10:], 16) + int(branch_output["steps"][5]["input"][10:], 16) == 10 ) if branch == "483": # Validation for initialState # Validation for tx steps assert ( int(branch_output["steps"][1]["input"][10:], 16) + int(branch_output["steps"][3]["input"][10:], 16) + int(branch_output["steps"][5]["input"][10:], 16) == 25 ) validate_test_data = ( ("simple_example_input.json", validate_simple_example, "153"), ("multiple_example_input.json", validate_multiple_example, "153,192,243"), ("two_contract_input.json", validate_two_contract, "311,341,371"), ("multi_contract_example_input.json", validate_multi_contract, "453,483"), ) check_state_validity_test_data = ( ("simple_example_input.json", "153"), ("multiple_example_input.json", "153,192,243"), ("two_contract_input.json", "311,341,371"), ("multi_contract_example_input.json", "453,483"), ) test_data_error = (("simple_example_input.json", "508"),) @pytest.mark.parametrize("input_file,validate_function,branches", validate_test_data) def test_concolic_conditions(input_file, validate_function, branches): input_path = str(TESTDATA / "concolic_io" / input_file) command = f"{MYTH} concolic {input_path} --branches {branches}" received_output = output_of(command) branches = [branch for branch in branches.split(",")] validate_function(received_output, branches) @pytest.mark.parametrize("input_file,branch", test_data_error) def test_concolic_error(input_file, branch): input_path = str(TESTDATA / "concolic_io" / input_file) command = f"{MYTH} concolic {input_path} --branches {branch}" received_output = subprocess.run( command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE ) assert ( f"The branch {branch} does not lead to a jump address, skipping this branch" in received_output.stderr.decode("UTF-8") ) def get_pc_from_disassembler(concrete_data, branches): init_state = setup_concrete_initial_state(concrete_data) laser_evm = LaserEVM(execution_timeout=100) laser_evm.open_states = [deepcopy(init_state)] plugin_loader = LaserPluginLoader() trace_plugin = TraceFinderBuilder() plugin_loader.load(trace_plugin) laser_evm.time = datetime.now() plugin_loader.instrument_virtual_machine(laser_evm, None) for transaction in concrete_data["steps"][:-1]: execute_transaction( laser_evm, callee_address=transaction["address"], caller_address=symbol_factory.BitVecVal( int(transaction["origin"], 16), 256 ), origin_address=symbol_factory.BitVecVal( int(transaction["origin"], 16), 256 ), gas_limit=int(transaction.get("gasLimit", "0x9999999999999999999999"), 16), data=binascii.a2b_hex(transaction["input"][2:]), gas_price=int(transaction.get("gasPrice", "0x773594000"), 16), value=int(transaction["value"], 16), track_gas=False, ) contract_addr = concrete_data["steps"][-1]["address"] assert len(laser_evm.open_states) == 1 instruction_list = ( laser_evm.open_states[0].accounts[int(contract_addr, 16)].code.instruction_list ) branches = [ util.get_instruction_index(instruction_list, branch) for branch in branches ] return branches def run_concolic(input_path, output, branches): with open(input_path) as f: concrete_data = json.load(f) _, input_trace = concrete_execution(concrete_data) input_last_tx = input_trace[-1] branches = [int(branch) for branch in branches.split(",")] time_handler.start_execution(1000) branches = get_pc_from_disassembler(concrete_data, branches) for out, branch in zip(output, branches): _, trace = concrete_execution(out) last_tx = trace[-1] tx_id = last_tx[0][1] branch_idx = last_tx.index((branch, tx_id)) input_idx = input_last_tx.index((branch, tx_id)) assert (branch_idx == input_idx) and last_tx[branch_idx + 1][ 0 ] != input_last_tx[branch_idx + 1][0] @pytest.mark.parametrize("input_file,branches", check_state_validity_test_data) def test_validate_concolic_output(input_file, branches): input_path = str(TESTDATA / "concolic_io" / input_file) command = f"{MYTH} concolic {input_path} --branches {branches}" received_output = output_of(command) run_concolic(input_path, received_output, branches) ================================================ FILE: tests/disassembler/__init__.py ================================================ ================================================ FILE: tests/disassembler/asm_test.py ================================================ import pytest from mythril.disassembler.asm import ( disassemble, find_op_code_sequence, get_opcode_from_name, is_sequence_match, ) valid_names = [("PUSH1", 0x60), ("STOP", 0x0), ("RETURN", 0xF3)] @pytest.mark.parametrize("operation_name, hex_value", valid_names) def test_get_opcode(operation_name: str, hex_value: int): # Act return_value = get_opcode_from_name(operation_name) # Assert assert return_value == hex_value def test_get_unknown_opcode(): operation_name = "definitely unknown" # Act with pytest.raises(RuntimeError): get_opcode_from_name(operation_name) sequence_match_test_data = [ # Normal no match ( (["PUSH1"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH3"}, {"opcode": "EQ"}], 1, False, ), # Normal match ( (["PUSH1"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH1"}, {"opcode": "EQ"}], 1, True, ), # Out of bounds pattern ( (["PUSH1"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH3"}, {"opcode": "EQ"}], 3, False, ), ( (["PUSH1"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH3"}, {"opcode": "EQ"}], 2, False, ), # Double option match ( (["PUSH1", "PUSH3"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH1"}, {"opcode": "EQ"}], 1, True, ), ( (["PUSH1", "PUSH3"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH3"}, {"opcode": "EQ"}], 1, True, ), # Double option no match ( (["PUSH1", "PUSH3"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH3"}, {"opcode": "EQ"}], 0, False, ), ] @pytest.mark.parametrize( "pattern, instruction_list, index, expected_result", sequence_match_test_data ) def test_is_sequence_match(pattern, instruction_list, index, expected_result): # Act return_value = is_sequence_match(pattern, instruction_list, index) # Assert assert return_value == expected_result find_sequence_match_test_data = [ # Normal no match ( (["PUSH1"], ["EQ"]), [{"opcode": "PUSH1"}, {"opcode": "PUSH3"}, {"opcode": "EQ"}], [], ), # Normal match ( (["PUSH1"], ["EQ"]), [ {"opcode": "PUSH1"}, {"opcode": "PUSH1"}, {"opcode": "EQ"}, {"opcode": "PUSH1"}, {"opcode": "EQ"}, ], [1, 3], ), ] @pytest.mark.parametrize( "pattern, instruction_list, expected_result", find_sequence_match_test_data ) def test_find_op_code_sequence(pattern, instruction_list, expected_result): # Act return_value = list(find_op_code_sequence(pattern, instruction_list)) # Assert assert return_value == expected_result def test_disassemble(): # Act instruction_list = disassemble(b"\x00\x16\x06") # Assert assert instruction_list[0]["opcode"] == "STOP" assert instruction_list[1]["opcode"] == "AND" assert instruction_list[2]["opcode"] == "MOD" ================================================ FILE: tests/disassembler/disassembly_test.py ================================================ from mythril.disassembler.disassembly import SignatureDB, get_function_info instruction_list = [ {"opcode": "PUSH4", "argument": "0x10203040"}, {"opcode": "EQ"}, {"opcode": "PUSH4", "argument": "0x40302010"}, {"opcode": "JUMPI"}, ] def test_get_function_info(mocker): # Arrange global instruction_list signature_database_mock = SignatureDB() mocker.patch.object(signature_database_mock, "get") signature_database_mock.get.return_value = ["function_name"] # Act function_hash, entry_point, function_name = get_function_info( 0, instruction_list, signature_database_mock ) # Assert assert function_hash == "0x10203040" assert entry_point == 0x40302010 assert function_name == "function_name" def test_get_function_info_multiple_names(mocker): # Arrange global instruction_list signature_database_mock = SignatureDB() mocker.patch.object(signature_database_mock, "get") signature_database_mock.get.return_value = ["function_name", "another_name"] # Act function_hash, entry_point, function_name = get_function_info( 0, instruction_list, signature_database_mock ) # Assert assert function_name in ( "function_name or another_name", "another_name or function_name", ) def test_get_function_info_no_names(mocker): # Arrange global instruction_list signature_database_mock = SignatureDB() mocker.patch.object(signature_database_mock, "get") signature_database_mock.get.return_value = [] # Act function_hash, entry_point, function_name = get_function_info( 0, instruction_list, signature_database_mock ) # Assert assert function_name == "_function_0x10203040" ================================================ FILE: tests/disassembler_test.py ================================================ import os from mythril.disassembler.disassembly import Disassembly from tests import ( TESTDATA_INPUTS, TESTDATA_OUTPUTS_CURRENT, TESTDATA_OUTPUTS_EXPECTED, BaseTestCase, ) class DisassemblerTestCase(BaseTestCase): def test_instruction_list(self): code = "0x606060405236156100ca5763ffffffff60e060020a600035041663054f7d9c81146100d3578063095c21e3146100f45780630ba50baa146101165780631a3719321461012857806366529e3f14610153578063682789a81461017257806389f21efc146101915780638da5cb5b146101ac5780638f4ffcb1146101d55780639a1f2a5714610240578063b5f522f71461025b578063bd94b005146102b6578063c5ab5a13146102c8578063cc424839146102f1578063deb077b914610303578063f3fef3a314610322575b6100d15b5b565b005b34610000576100e0610340565b604080519115158252519081900360200190f35b3461000057610104600435610361565b60408051918252519081900360200190f35b34610000576100d1600435610382565b005b3461000057610104600160a060020a03600435166103b0565b60408051918252519081900360200190f35b346100005761010461041e565b60408051918252519081900360200190f35b3461000057610104610424565b60408051918252519081900360200190f35b34610000576100d1600160a060020a036004351661042b565b005b34610000576101b961046f565b60408051600160a060020a039092168252519081900360200190f35b3461000057604080516020600460643581810135601f81018490048402850184019095528484526100d1948235600160a060020a039081169560248035966044359093169594608494929391019190819084018382808284375094965061048595505050505050565b005b34610000576100d1600160a060020a03600435166106e7565b005b346100005761026b60043561072b565b60408051600160a060020a0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34610000576100d160043561077a565b005b34610000576101b9610830565b60408051600160a060020a039092168252519081900360200190f35b34610000576100d160043561083f565b005b34610000576101046108a1565b60408051918252519081900360200190f35b34610000576100d1600160a060020a03600435166024356108a7565b005b60015474010000000000000000000000000000000000000000900460ff1681565b600681815481101561000057906000526020600020900160005b5054905081565b600054600160a060020a036301000000909104811690331681146103a557610000565b60038290555b5b5050565b6005546040805160006020918201819052825160e260020a631d010437028152600160a060020a03868116600483015293519194939093169263740410dc92602480830193919282900301818787803b156100005760325a03f115610000575050604051519150505b919050565b60035481565b6006545b90565b600054600160a060020a0363010000009091048116903316811461044e57610000565b60018054600160a060020a031916600160a060020a0384161790555b5b5050565b60005463010000009004600160a060020a031681565b6000600060006000600060006000600160149054906101000a900460ff16156104ad57610000565b87600081518110156100005760209101015160005460f860020a918290048202975002600160f860020a031990811690871614156105405760009450600196505b600587101561053057878781518110156100005790602001015160f860020a900460f860020a0260f860020a900485610100020194505b6001909601956104ee565b61053b8b868c610955565b6106d6565b600054610100900460f860020a02600160f860020a0319908116908716141561069e57506001955060009250829150819050805b60058710156105b657878781518110156100005790602001015160f860020a900460f860020a0260f860020a900481610100020190505b600190960195610574565b600596505b60098710156105fd57878781518110156100005790602001015160f860020a900460f860020a0260f860020a900484610100020193505b6001909601956105bb565b600996505b600d87101561064457878781518110156100005790602001015160f860020a900460f860020a0260f860020a900483610100020192505b600190960195610602565b600d96505b601187101561068b57878781518110156100005790602001015160f860020a900460f860020a0260f860020a900482610100020191505b600190960195610649565b61053b8b828c878787610bc4565b6106d6565b60005462010000900460f860020a02600160f860020a031990811690871614156106d15761053b8b8b610e8e565b6106d6565b610000565b5b5b5b5b5050505050505050505050565b600054600160a060020a0363010000009091048116903316811461070a57610000565b60058054600160a060020a031916600160a060020a0384161790555b5b5050565b600760208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701549690970154600160a060020a03909516969395929491939092909188565b600081815260076020526040812054600160a060020a0390811690331681146107a257610000565b600083815260076020526040902080546004820154600583015460038401549395506107dc93600160a060020a039093169291029061105e565b50600060058301556107ed83611151565b6040805184815290517fb5dc9baf0cb4e7e4759fa12eadebddf9316e26147d5a9ae150c4228d5a1dd23f9181900360200190a161082933611244565b5b5b505050565b600154600160a060020a031681565b600054600160a060020a0363010000009091048116903316811461086257610000565b600080546040516301000000909104600160a060020a0316916108fc851502918591818181858888f1935050505015156103ab57610000565b5b5b5050565b60025481565b600054600160a060020a036301000000909104811690331681146108ca57610000565b6000805460408051602090810184905281517fa9059cbb0000000000000000000000000000000000000000000000000000000081526301000000909304600160a060020a0390811660048501526024840187905291519187169363a9059cbb9360448082019492918390030190829087803b156100005760325a03f115610000575050505b5b505050565b610100604051908101604052806000600160a060020a03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525060006007600085815260200190815260200160002061010060405190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505091508260001415610a4857610000565b8160400151838115610000570615610a5f57610000565b6002548410610a6d57610000565b8160400151838115610000570490508160a00151811115610a8d57610000565b610a9c8584846020015161128e565b1515610aa757610000565b60a082018051829003815260008581526007602081815260409283902086518154600160a060020a031916600160a060020a038216178255918701516001820181905593870151600282015560608701516003820155608087015160048201559351600585015560c0860151600685015560e08601519390910192909255610b319190859061105e565b1515610b3c57610000565b610b518582846080015102846060015161105e565b1515610b5c57610000565b60a0820151158015610b71575060c082015115155b15610b7f57610b7f84611151565b5b6040805185815290517fb5dc9baf0cb4e7e4759fa12eadebddf9316e26147d5a9ae150c4228d5a1dd23f9181900360200190a1610bbc85611244565b5b5050505050565b831515610bd057610000565b82851415610bdd57610000565b801580610be8575081155b15610bf257610000565b80848115610000570615610c0557610000565b6005546040805160006020918201819052825160e260020a631d010437028152600160a060020a038b8116600483015293518695949094169363740410dc9360248084019491938390030190829087803b156100005760325a03f11561000057505050604051805190501015610c7a57610000565b610c8586858761128e565b1515610c9057610000565b600554604080517fbe0140a6000000000000000000000000000000000000000000000000000000008152600160a060020a03898116600483015260006024830181905260448301869052925193169263be0140a69260648084019391929182900301818387803b156100005760325a03f115610000575050506101006040519081016040528087600160a060020a03168152602001848152602001838152602001868152602001828681156100005704815260200182815260200160068054905081526020014281525060076000600254815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015590505060068054806001018281815481835581811511610e2757600083815260209020610e279181019083015b80821115610e235760008155600101610e0f565b5090565b5b505050916000526020600020900160005b50600280549182905560018201905560408051918252517fb5dc9baf0cb4e7e4759fa12eadebddf9316e26147d5a9ae150c4228d5a1dd23f92509081900360200190a1610e8586611244565b5b505050505050565b600354818115610000570615610ea357610000565b600160009054906101000a9004600160a060020a0316600160a060020a031663cf35bdd060016000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b156100005760325a03f115610000575050604080518051600080546020938401829052845160e060020a6323b872dd028152600160a060020a038981166004830152630100000090920482166024820152604481018890529451921694506323b872dd936064808201949392918390030190829087803b156100005760325a03f1156100005750506040515115159050610f9857610000565b600554600354600160a060020a039091169063be0140a6908490600190858115610000576040805160e060020a63ffffffff8816028152600160a060020a039095166004860152921515602485015204604483015251606480830192600092919082900301818387803b156100005760325a03f1156100005750505061101d82611244565b60408051600160a060020a038416815290517f30a29a0aa75376a69254bb98dbd11db423b7e8c3473fb5bf0fcba60bcbc42c4b9181900360200190a15b5050565b600081151561106c57610000565b6001546040805160006020918201819052825160e460020a630cf35bdd028152600481018790529251600160a060020a039094169363cf35bdd09360248082019493918390030190829087803b156100005760325a03f1156100005750505060405180519050600160a060020a031663a9059cbb85856000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051519150505b9392505050565b6000818152600760205260409020600690810154815490919060001981019081101561000057906000526020600020900160005b5054600682815481101561000057906000526020600020900160005b50556006805460001981018083559091908280158290116111e7576000838152602090206111e79181019083015b80821115610e235760008155600101610e0f565b5090565b5b50506006548314915061122d9050578060076000600684815481101561000057906000526020600020900160005b505481526020810191909152604001600020600601555b6000828152600760205260408120600601555b5050565b60045481600160a060020a031631101561128957600454604051600160a060020a0383169180156108fc02916000818181858888f19350505050151561128957610000565b5b5b50565b600081151561129c57610000565b6001546040805160006020918201819052825160e460020a630cf35bdd028152600481018790529251600160a060020a039094169363cf35bdd09360248082019493918390030190829087803b156100005760325a03f11561000057505060408051805160006020928301819052835160e060020a6323b872dd028152600160a060020a038a811660048301523081166024830152604482018a905294519490921694506323b872dd93606480840194939192918390030190829087803b156100005760325a03f115610000575050604051519150505b93925050505600a165627a7a723058204dee0e1bf170a9d122508f3e876c4a84893b12a7345591521af4ca737bb765000029" disassembly = Disassembly(code) self.assertEqual(len(disassembly.instruction_list), 3523) def test_easm_from_solidity_files(self): for input_file in TESTDATA_INPUTS.iterdir(): output_expected = TESTDATA_OUTPUTS_EXPECTED / (input_file.name + ".easm") output_current = TESTDATA_OUTPUTS_CURRENT / (input_file.name + ".easm") if os.path.isfile(output_current) is False: # Ignore files which do not have output data continue code = input_file.read_text() disassembly = Disassembly(code) output_current.write_text(disassembly.get_easm()) if not (output_expected.read_text() == output_current.read_text()): self.found_changed_files(input_file, output_expected, output_current) self.assert_and_show_changed_files() ================================================ FILE: tests/evmcontract_test.py ================================================ from mythril.ethereum.evmcontract import EVMContract from tests import BaseTestCase class EVMContractTestCase(BaseTestCase): def setUp(self): """""" super().setUp() self.code = "0x60606040525b603c5b60006010603e565b9050593681016040523660008237602060003683856040603f5a0204f41560545760206000f35bfe5b50565b005b73c3b2ae46792547a96b9f84405e36d0e07edcd05c5b905600a165627a7a7230582062a884f947232ada573f95940cce9c8bfb7e4e14e21df5af4e884941afb55e590029" self.creation_code = "0x60606040525b603c5b60006010603e565b9050593681016040523660008237602060003683856040603f5a0204f41560545760206000f35bfe5b50565b005b73c3b2ae46792547a96b9f84405e36d0e07edcd05c5b905600a165627a7a7230582062a884f947232ada573f95940cce9c8bfb7e4e14e21df5af4e884941afb55e590029" class Getinstruction_listTestCase(EVMContractTestCase): def runTest(self): """""" contract = EVMContract(self.code, self.creation_code) disassembly = contract.disassembly self.assertEqual( len(disassembly.instruction_list), 53, "Error disassembling code using EVMContract.get_instruction_list()", ) class GetEASMTestCase(EVMContractTestCase): def runTest(self): """""" contract = EVMContract(self.code) instruction_list = contract.get_easm() self.assertTrue( "PUSH1 0x60" in instruction_list, "Error obtaining EASM code through EVMContract.get_easm()", ) class MatchesExpressionTestCase(EVMContractTestCase): def runTest(self): """""" contract = EVMContract(self.code) self.assertTrue( contract.matches_expression("code#PUSH1# or code#PUSH1#"), "Unexpected result in expression matching", ) self.assertFalse( contract.matches_expression("func#abcdef#"), "Unexpected result in expression matching", ) ================================================ FILE: tests/features_test.py ================================================ from pathlib import Path import pytest from mythril.mythril import MythrilDisassembler from mythril.solidity.features import SolidityFeatureExtractor from mythril.solidity.soliditycontract import SolidityContract TEST_FILES = Path(__file__).parent / "testdata/input_contracts" solc_binary_5 = MythrilDisassembler._init_solc_binary("v0.5.0") solc_binary_8 = MythrilDisassembler._init_solc_binary("v0.8.0") solc_binary_82 = MythrilDisassembler._init_solc_binary("v0.8.20") test_cases = [ ("suicide.sol", 1, "kill", "contains_selfdestruct", True, solc_binary_5), ( "SimpleModifier.sol", 1, "withdrawfunds", "all_require_vars", set(["msg", "owner"]), solc_binary_5, ), ( "SimpleModifier.sol", 1, "withdrawfunds", "transfer_vars", set(["owner"]), solc_binary_5, ), ("rubixi.sol", 18, "init", "contains_selfdestruct", False, solc_binary_5), ("rubixi.sol", 18, "collectAllFees", "has_owner_modifier", True, solc_binary_5), ("rubixi.sol", 18, "collectAllFees", "is_payable", False, solc_binary_5), ( "rubixi.sol", 18, "collectAllFees", "all_require_vars", set(["collectedFees", "creator"]), solc_binary_5, ), ( "rubixi.sol", 18, "collectPercentOfFees", "all_require_vars", set(["collectedFees", "_pcent", "creator"]), solc_binary_5, ), ( "rubixi.sol", 18, "changeMultiplier", "all_require_vars", set(["_mult", "creator"]), solc_binary_5, ), ("rubixi.sol", 18, "", "is_payable", True, solc_binary_5), ( "rubixi.sol", 18, "collectAllFees", "transfer_vars", set(["creator"]), solc_binary_5, ), ("exceptions.sol", 8, "assert3", "contains_assert", True, solc_binary_5), ( "exceptions.sol", 8, "requireisfine", "all_require_vars", set(["input"]), solc_binary_5, ), ("WalletLibrary.sol", 23, "execute", "has_owner_modifier", True, solc_binary_5), ("WalletLibrary.sol", 23, "initWallet", "has_owner_modifier", False, solc_binary_5), ( "WalletLibrary.sol", 23, "initWallet", "all_require_vars", set(["m_numOwners"]), solc_binary_5, ), ( "WalletLibrary.sol", 23, "confirm", "all_require_vars", set(["success"]), solc_binary_5, ), ("kcalls.sol", 3, "callSetN", "contains_call", True, solc_binary_5), ("kcalls.sol", 3, "delegatecallSetN", "contains_delegatecall", True, solc_binary_5), ("kcalls.sol", 3, "callcodeSetN", "contains_staticcall", True, solc_binary_5), ( "regression_1.sol", 5, "transfer", "all_require_vars", set(["userBalances", "msg", "_to", "_amount"]), solc_binary_8, ), ("SecureVault.sol", 11, "withdraw", "has_owner_modifier", True, solc_binary_82), ("SecureVault.sol", 11, "deposit", "has_owner_modifier", False, solc_binary_82), ( "SecureVault.sol", 11, "withdraw", "all_require_vars", set(["amount", "this"]), solc_binary_82, ), ] @pytest.mark.parametrize( "file_name, num_funcs, func_name, field, expected_value, solc_binary", test_cases ) def test_features(file_name, num_funcs, func_name, field, expected_value, solc_binary): input_file = TEST_FILES / file_name name = file_name.split(".")[0] if name[0].islower(): name = name.capitalize() contract = SolidityContract(str(input_file), name=name, solc_binary=solc_binary) ms = contract.solc_json["sources"][str(input_file)]["ast"] sfe = SolidityFeatureExtractor(ms) fe = sfe.extract_features() assert len(fe) == num_funcs assert fe[func_name][field] == expected_value ================================================ FILE: tests/graph_test.py ================================================ """ This test only checks whether dumping is successful, not whether the dumped state space makes sense """ from types import SimpleNamespace from mythril.ethereum import util from mythril.mythril import MythrilAnalyzer, MythrilDisassembler from mythril.solidity.soliditycontract import EVMContract from tests import TESTDATA_INPUTS def test_generate_graph(): for input_file in TESTDATA_INPUTS.iterdir(): if input_file.name != "origin.sol.o": continue contract = EVMContract(input_file.read_text()) disassembler = MythrilDisassembler() disassembler.contracts.append(contract) args = SimpleNamespace( execution_timeout=5, max_depth=30, solver_timeout=10000, no_onchain_data=True, loop_bound=None, create_timeout=None, disable_dependency_pruning=False, custom_modules_directory=None, pruning_factor=0, parallel_solving=True, unconstrained_storage=True, call_depth_limit=3, disable_iprof=True, solver_log=None, transaction_sequences=None, disable_coverage_strategy=False, disable_mutation_pruner=False, enable_summaries=False, enable_state_merging=False, ) analyzer = MythrilAnalyzer( disassembler=disassembler, strategy="dfs", address=(util.get_indexed_address(0)), cmd_args=args, ) analyzer.graph_html(transaction_count=1) ================================================ FILE: tests/instructions/__init__.py ================================================ ================================================ FILE: tests/instructions/basefee_test.py ================================================ from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import symbol_factory def test_basefee(): # Arrange world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment( account, None, None, None, None, None, basefee=symbol_factory.BitVecSym("gasfee", 256), ) og_state = GlobalState( world_state, environment, None, MachineState(gas_limit=8000000) ) og_state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) og_state.mstate.stack = [] instruction = Instruction("basefee", dynamic_loader=None) # Act new_state = instruction.evaluate(og_state)[0] # Assert assert new_state.mstate.stack == [symbol_factory.BitVecSym("gasfee", 256)] ================================================ FILE: tests/instructions/codecopy_test.py ================================================ from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction def test_codecopy_concrete(): # Arrange world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment(account, None, None, None, None, None, None) og_state = GlobalState( world_state, environment, None, MachineState(gas_limit=8000000) ) og_state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) og_state.mstate.stack = [2, 2, 2] instruction = Instruction("codecopy", dynamic_loader=None) # Act new_state = instruction.evaluate(og_state)[0] # Assert assert new_state.mstate.memory[2] == 96 assert new_state.mstate.memory[3] == 64 ================================================ FILE: tests/instructions/create2_test.py ================================================ import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.calldata import ConcreteCalldata from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.transaction_models import ( MessageCallTransaction, TransactionStartSignal, ) from mythril.laser.smt import symbol_factory from mythril.support.support_utils import get_code_hash last_state = None created_contract_account = None def generate_salted_address(code_str, salt, caller): addr = hex(caller.value)[2:] addr = "0" * (40 - len(addr)) + addr salt = hex(salt.value)[2:] salt = "0" * (64 - len(salt)) + salt contract_address = int( get_code_hash("0xff" + addr + salt + get_code_hash(code_str)[2:])[26:], 16 ) return contract_address def test_create2(): world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment(account, None, None, None, None, None, None) og_state = GlobalState( world_state, environment, None, MachineState(gas_limit=8000000) ) code_raw = [] code = "606060606060" for i in range(len(code) // 2): code_raw.append(int(code[2 * i : 2 * (i + 1)], 16)) calldata = ConcreteCalldata("1", code_raw) environment.calldata = calldata og_state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) value = symbol_factory.BitVecVal(3, 256) salt = symbol_factory.BitVecVal(10, 256) og_state.mstate.stack = [ salt, symbol_factory.BitVecVal(6, 256), symbol_factory.BitVecVal(0, 256), value, ] og_state.mstate.memory.extend(100) og_state.mstate.memory[0:6] = [96] * 6 time_handler.start_execution(10) instruction = Instruction("create2", dynamic_loader=None) # Act + Assert with pytest.raises(TransactionStartSignal) as t: _ = instruction.evaluate(og_state)[0] assert t.value.transaction.call_value == value assert t.value.transaction.code.bytecode == code assert t.value.transaction.callee_account.address == generate_salted_address( code, salt, account.address ) ================================================ FILE: tests/instructions/create_test.py ================================================ import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.calldata import ConcreteCalldata from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.transaction_models import ( MessageCallTransaction, TransactionStartSignal, ) last_state = None created_contract_account = None def test_create(): world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606060") environment = Environment(account, None, None, None, None, None, None) og_state = GlobalState( world_state, environment, None, MachineState(gas_limit=8000000) ) code_raw = [] code = "606060606060" for i in range(len(code) // 2): code_raw.append(int(code[2 * i : 2 * (i + 1)], 16)) calldata = ConcreteCalldata("1", code_raw) environment.calldata = calldata og_state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) value = 3 og_state.mstate.stack = [6, 0, value] instruction = Instruction("create", dynamic_loader=None) og_state.mstate.memory.extend(100) og_state.mstate.memory[0:6] = [96] * 6 time_handler.start_execution(100) # Act + Assert with pytest.raises(TransactionStartSignal) as t: _ = instruction.evaluate(og_state)[0] assert t.value.transaction.call_value == value assert t.value.transaction.code.bytecode == code assert ( t.value.transaction.callee_account.address == world_state._generate_new_address(account.address.value) ) ================================================ FILE: tests/instructions/extcodecopy_test.py ================================================ from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import symbol_factory def test_extcodecopy(): # Arrange new_world_state = WorldState() new_account = new_world_state.create_account(balance=10, address=101) new_account.code = Disassembly("60616240") ext_account = new_world_state.create_account(balance=1000, address=121) ext_account.code = Disassembly("6040404040") new_environment = Environment(new_account, None, None, None, None, None, None) state = GlobalState( new_world_state, new_environment, None, MachineState(gas_limit=8000000) ) state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) state.mstate.stack = [3, 0, 0, 121] instruction = Instruction("extcodecopy", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert new_state.mstate.memory[0:3] == [96, 64, 64] def test_extcodecopy_fail(): # Arrange new_world_state = WorldState() new_account = new_world_state.create_account(balance=10, address=101) new_account.code = Disassembly("60616240") new_environment = Environment(new_account, None, None, None, None, None, None) state = GlobalState( new_world_state, new_environment, None, MachineState(gas_limit=8000000) ) state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) state.mstate.stack = [2, 2, 2, symbol_factory.BitVecSym("FAIL", 256)] instruction = Instruction("extcodecopy", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert new_state.mstate.stack == [] assert new_state.mstate.memory._memory == state.mstate.memory._memory ================================================ FILE: tests/instructions/extcodehash_test.py ================================================ from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import symbol_factory from mythril.support.support_utils import get_code_hash # Arrange world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") world_state.create_account(balance=10, address=1000) environment = Environment(account, None, None, None, None, None, None) og_state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) og_state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) instruction = Instruction("extcodehash", dynamic_loader=None) def test_extcodehash_no_account(): # If account does not exist, return 0 og_state.mstate.stack = [symbol_factory.BitVecVal(1, 256)] new_state = instruction.evaluate(og_state)[0] assert new_state.mstate.stack[-1] == 0 def test_extcodehash_no_code(): # If account code does not exist, return hash of empty set. og_state.mstate.stack = [symbol_factory.BitVecVal(1000, 256)] new_state = instruction.evaluate(og_state)[0] assert hex(new_state.mstate.stack[-1].value) == get_code_hash("") def test_extcodehash_return_hash(): # If account code exists, return hash of the code. og_state.mstate.stack = [symbol_factory.BitVecVal(101, 256)] new_state = instruction.evaluate(og_state)[0] assert hex(new_state.mstate.stack[-1].value) == get_code_hash("60606040") ================================================ FILE: tests/instructions/push_test.py ================================================ import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import simplify, symbol_factory def get_state(input): world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly(input) environment = Environment(account, None, None, None, None, None, None) state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) return state BVV = symbol_factory.BitVecVal BV = symbol_factory.BitVecSym test_data = [ ("5F", 0), # Successful execution, stack consists of a single item, set to zero ( "5F" * 1024, 0, ), # Successful execution, stack consists of 1024 items, all set to zero ] @pytest.mark.parametrize("inputs,output", test_data) def test_push0(inputs, output): # Arrange state = get_state(inputs) instruction = Instruction("push", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == output ================================================ FILE: tests/instructions/sar_test.py ================================================ import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import simplify, symbol_factory def get_state(): world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment(account, None, None, None, None, None, None) state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) return state BVV = symbol_factory.BitVecVal BV = symbol_factory.BitVecSym test_data = ( ([BVV(-1, 256), BVV(1, 256)], BVV(-1, 256)), ([BVV(23, 256), BVV(257, 256)], BVV(0, 256)), ([BVV(23, 256), BVV(30, 256)], BVV(23 >> 30, 256)), ([BVV(-10, 256), BVV(10, 256)], BVV(-1, 256)), ([BV("a", 256), BV("b", 256)], BV("a", 256) >> BV("b", 256)), ) @pytest.mark.parametrize("inputs,output", test_data) def test_sar(inputs, output): # Arrange state = get_state() state.mstate.stack = inputs instruction = Instruction("sar", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == output @pytest.mark.parametrize( # Test cases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#sar-arithmetic-shift-right "val1, val2, expected ", ( ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x00", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x01", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0x01", "0xc000000000000000000000000000000000000000000000000000000000000000", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0xff", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0100", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0101", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x00", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x01", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xff", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0100", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0x0000000000000000000000000000000000000000000000000000000000000000", "0x01", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x4000000000000000000000000000000000000000000000000000000000000000", "0xfe", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xf8", "0x000000000000000000000000000000000000000000000000000000000000007f", ), ( "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xfe", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xff", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0100", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ), ) def test_concrete_sar(val1, val2, expected): # Arrange state = get_state() state.mstate.stack = [BVV(int(val1, 16), 256), BVV(int(val2, 16), 256)] expected = BVV(int(expected, 16), 256) instruction = Instruction("sar", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == expected ================================================ FILE: tests/instructions/shl_test.py ================================================ import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import simplify, symbol_factory def get_state(): world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment(account, None, None, None, None, None, None) state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) return state BVV = symbol_factory.BitVecVal BV = symbol_factory.BitVecSym test_data = ( ([BVV(2, 256), BVV(2, 256)], BVV(8, 256)), ([BVV(23, 256), BVV(257, 256)], BVV(0, 256)), ([BVV(23, 256), BVV(30, 256)], BVV(23 * (1 << 30), 256)), ([BV("a", 256), BVV(270, 256)], 0), ([BV("a", 256), BV("b", 256)], BV("a", 256) << BV("b", 256)), ) @pytest.mark.parametrize("inputs,output,", test_data) def test_shl(inputs, output): # Arrange state = get_state() state.mstate.stack = inputs instruction = Instruction("shl", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == output @pytest.mark.parametrize( # Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shl-shift-left "val1, val2, expected", ( ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x00", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x01", "0x0000000000000000000000000000000000000000000000000000000000000002", ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0xff", "0x8000000000000000000000000000000000000000000000000000000000000000", ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0100", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0101", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x00", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x01", "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xff", "0x8000000000000000000000000000000000000000000000000000000000000000", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0100", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x0000000000000000000000000000000000000000000000000000000000000000", "0x01", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x01", "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", ), ), ) def test_concrete_shl(val1, val2, expected): # Arrange state = get_state() state.mstate.stack = [BVV(int(val1, 16), 256), BVV(int(val2, 16), 256)] expected = BVV(int(expected, 16), 256) instruction = Instruction("shl", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == expected ================================================ FILE: tests/instructions/shr_test.py ================================================ import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import LShR, simplify, symbol_factory def get_state(): world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment(account, None, None, None, None, None, None) state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) state.transaction_stack.append( (MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) ) return state BVV = symbol_factory.BitVecVal BV = symbol_factory.BitVecSym test_data = ( ([BVV(33, 256), BVV(4, 256)], BVV(2, 256)), ([BVV(1 << 100, 256), BVV(257, 256)], BVV(0, 256)), ([BVV(23233, 256), BVV(10, 256)], BVV(23233 // (1 << 10), 256)), ([BV("a", 256), BVV(270, 256)], 0), ( [BV("a", 256), BV("b", 256)], LShR(BV("a", 256), BV("b", 256)), ), # Current approximate specs ) @pytest.mark.parametrize("inputs,output,", test_data) def test_shr(inputs, output): # Arrange state = get_state() state.mstate.stack = inputs instruction = Instruction("shr", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == output @pytest.mark.parametrize( # Cases: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shr-logical-shift-right "val1, val2, expected", ( ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x00", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0x0000000000000000000000000000000000000000000000000000000000000001", "0x01", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0x01", "0x4000000000000000000000000000000000000000000000000000000000000000", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0xff", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0100", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x8000000000000000000000000000000000000000000000000000000000000000", "0x0101", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x00", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x01", "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xff", "0x0000000000000000000000000000000000000000000000000000000000000001", ), ( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0x0100", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ( "0x0000000000000000000000000000000000000000000000000000000000000000", "0x01", "0x0000000000000000000000000000000000000000000000000000000000000000", ), ), ) def test_concrete_shr(val1, val2, expected): state = get_state() state.mstate.stack = [BVV(int(val1, 16), 256), BVV(int(val2, 16), 256)] expected = BVV(int(expected, 16), 256) instruction = Instruction("shr", dynamic_loader=None) # Act new_state = instruction.evaluate(state)[0] # Assert assert simplify(new_state.mstate.stack[-1]) == expected ================================================ FILE: tests/instructions/static_call_test.py ================================================ from unittest.mock import patch import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.call import SymbolicCalldata from mythril.laser.ethereum.evm_exceptions import WriteProtection from mythril.laser.ethereum.instructions import Instruction from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.transaction import TransactionStartSignal from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction from mythril.laser.smt import symbol_factory def get_global_state(): active_account = Account("0x0", code=Disassembly("60606040")) environment = Environment( active_account, None, SymbolicCalldata("2"), None, None, None, None ) world_state = WorldState() world_state.put_account(active_account) state = GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) state.transaction_stack.append( (MessageCallTransaction(world_state=world_state, gas_limit=8000000), None) ) return state @patch( "mythril.laser.ethereum.instructions.get_call_parameters", return_value=( "0", Account(code=Disassembly(code="0x00"), address="0x19"), 0, 0, 0, 0, 0, ), ) def test_staticcall(f1): # Arrange state = get_global_state() state.mstate.stack = [10, 10, 10, 10, 10, 10, 10, 10, 0] instruction = Instruction("staticcall", dynamic_loader=None) # Act and Assert with pytest.raises(TransactionStartSignal) as ts: instruction.evaluate(state) assert ts.value.transaction.static assert ts.value.transaction.initial_global_state().environment.static test_data = ( "selfdestruct", "create", "create2", "log0", "log1", "log2", "log3", "log4", "sstore", ) @pytest.mark.parametrize("input", test_data) def test_staticness(input): # Arrange state = get_global_state() state.environment.static = True state.mstate.stack = [] instruction = Instruction(input, dynamic_loader=None) # Act and Assert with pytest.raises(WriteProtection): instruction.evaluate(state) test_data_call = ((0, True), (100, False)) @pytest.mark.parametrize("input, success", test_data_call) @patch("mythril.laser.ethereum.instructions.get_call_parameters") def test_staticness_call_concrete(f1, input, success): # Arrange state = get_global_state() state.environment.static = True state.mstate.stack = [10] * 100 code = Disassembly(code="616263") f1.return_value = ("0", Account(code=code, address="0x19"), 0, input, 0, 0, 0) instruction = Instruction("call", dynamic_loader=None) # Act and Assert if success: with pytest.raises(TransactionStartSignal) as ts: instruction.evaluate(state) assert ts.value.transaction.static else: with pytest.raises(WriteProtection): instruction.evaluate(state) @patch("mythril.laser.ethereum.instructions.get_call_parameters") def test_staticness_call_symbolic(f1): # Arrange state = get_global_state() state.environment.static = True state.mstate.stack = [10] * 100 call_value = symbol_factory.BitVecSym("x", 256) code = Disassembly(code="616263") f1.return_value = ("0", Account(code=code, address="0x19"), 0, call_value, 0, 0, 0) instruction = Instruction("call", dynamic_loader=None) # Act and Assert with pytest.raises(TransactionStartSignal) as ts: instruction.evaluate(state) assert ts.value.transaction.static assert ts.value.global_state.world_state.constraints[-1] == (call_value == 0) ================================================ FILE: tests/integration_tests/analysis_tests.py ================================================ import json import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") test_data = ( ( "flag_array.sol.o", { "TX_COUNT": 1, "TX_OUTPUT": 1, "MODULE": "EtherThief", "ISSUE_COUNT": 1, "ISSUE_NUMBER": 0, }, "0xab12585800000000000000000000000000000000000000000000000000000000000004d2", ), ( "exceptions_0.8.0.sol.o", { "TX_COUNT": 1, "TX_OUTPUT": 1, "MODULE": "Exceptions", "ISSUE_COUNT": 2, "ISSUE_NUMBER": 0, }, None, ), ( "symbolic_exec_bytecode.sol.o", { "TX_COUNT": 1, "TX_OUTPUT": 0, "MODULE": "AccidentallyKillable", "ISSUE_COUNT": 1, "ISSUE_NUMBER": 0, }, None, ), ( "extcall.sol.o", { "TX_COUNT": 1, "TX_OUTPUT": 0, "MODULE": "Exceptions", "ISSUE_COUNT": 1, "ISSUE_NUMBER": 0, }, None, ), ) @pytest.mark.parametrize("file_name, tx_data, calldata", test_data) def test_analysis(file_name, tx_data, calldata): bytecode_file = str(TESTDATA / "inputs" / file_name) command = f"""python3 {MYTH} analyze -f {bytecode_file} -t {tx_data["TX_COUNT"]} -o jsonv2 -m {tx_data["MODULE"]} --solver-timeout 60000 --no-onchain-data""" output = json.loads(output_of(command)) assert len(output[0]["issues"]) == tx_data["ISSUE_COUNT"] if calldata: test_case = output[0]["issues"][tx_data["ISSUE_NUMBER"]]["extra"]["testCases"][ 0 ] assert test_case["steps"][tx_data["TX_OUTPUT"]]["input"] == calldata @pytest.mark.parametrize("file_name, tx_data, calldata", test_data) def test_analysis_pending(file_name, tx_data, calldata): bytecode_file = str(TESTDATA / "inputs" / file_name) command = f"""python3 {MYTH} analyze -f {bytecode_file} -t {tx_data["TX_COUNT"]} -o jsonv2 -m {tx_data["MODULE"]} --solver-timeout 60000 --strategy pending --no-onchain-data""" output = json.loads(output_of(command)) assert len(output[0]["issues"]) == tx_data["ISSUE_COUNT"] if calldata: test_case = output[0]["issues"][tx_data["ISSUE_NUMBER"]]["extra"]["testCases"][ 0 ] assert test_case["steps"][tx_data["TX_OUTPUT"]]["input"] == calldata test_data_code = [ ("114", f"{TESTDATA}/input_contracts/tx.sol", True), ("123", f"{TESTDATA}/input_contracts/requirements_violation_pos.sol", True), ("123", f"{TESTDATA}/input_contracts/requirements_violation_neg.sol", False), ("132", f"{TESTDATA}/input_contracts/unexpected_ether_pos.sol", True), ("132", f"{TESTDATA}/input_contracts/unexpected_ether_neg.sol", False), ] @pytest.mark.parametrize("swc, file_path, exists", test_data_code) def test_analysis_code(swc, file_path, exists): assert ( "SWC ID: {}".format(swc) in output_of(f"python3 {MYTH} a {file_path} --solver-timeout 5000") ) == exists ================================================ FILE: tests/integration_tests/coverage_metrics_test.py ================================================ import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") test_data = [ (open(f"{TESTDATA}/inputs/coverage.sol.o").read(), True), ] @pytest.mark.parametrize("code, exists", test_data) def test_basic_coverage(code, exists): assert ( "instruction_discovery_time" in output_of(f"{MYTH} a -c 0x{code} --solver-timeout 1000 -o jsonv2") ) == exists ================================================ FILE: tests/integration_tests/old_version_test.py ================================================ import json import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") test_data = ( ("old_origin.sol", 1), ("old_version.sol", 2), ) @pytest.mark.parametrize("file_name, issues", test_data) def test_analysis_old(file_name, issues): file = str(TESTDATA / "input_contracts" / file_name) command = f"python3 {MYTH} analyze {file} -o jsonv2" output = json.loads(output_of(command)) assert len(output[0]["issues"]) >= issues ================================================ FILE: tests/integration_tests/safe_functions_test.py ================================================ import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") test_data = ( ("suicide.sol", [], "0.5.0"), ("overflow.sol", ["balanceOf(address)", "totalSupply()"], "0.5.0"), ( "ether_send.sol", [ "crowdfunding()", "owner()", "balances(address)", "getBalance()", ], "0.5.0", ), ) bytes_test_data = ( ("suicide.sol.o", []), ("overflow.sol.o", ["balanceOf(address)", "totalSupply()"]), ( "ether_send.sol.o", ["crowdfunding()", "withdrawfunds()", "owner()", "balances(address)"], ), ) @pytest.mark.parametrize("file_name, safe_funcs, version", test_data) def test_analysis(file_name, safe_funcs, version): file = str(TESTDATA / "input_contracts" / file_name) command = f"python3 {MYTH} safe-functions {file} --solv {version}" output = output_of(command) assert f"{len(safe_funcs)} functions are deemed safe in this contract" in output for func in safe_funcs: assert func in output @pytest.mark.parametrize("file_name, safe_funcs", bytes_test_data) def test_bytecode_analysis(file_name, safe_funcs): file = str(TESTDATA / "inputs" / file_name) command = f"python3 {MYTH} safe-functions --bin-runtime -f {file}" output = output_of(command) assert f"{len(safe_funcs)} functions are deemed safe in this contract" in output ================================================ FILE: tests/integration_tests/solc_settings_test.py ================================================ from subprocess import STDOUT, check_output from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") def test_positive_solc_settings(): file_dir = str(TESTDATA / "json_test_dir" / "dir_a") json_file_path = str(TESTDATA / "json_test_dir" / "test_file.json") file_path = file_dir + "/input_file.sol" command = f"cd {file_dir} && python3 {MYTH} analyze {file_path} --solc-json {json_file_path} --solv 0.8.0" output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8") assert "The analysis was completed successfully" in output def test_positive_solc_args(): base_path = str(TESTDATA) file_dir = str(TESTDATA / "json_test_dir" / "dir_a") file_path = file_dir + "/input_file_args.sol" command = f"""cd {file_dir} && python3 {MYTH} analyze {file_path} --solc-args "--allow-paths {base_path}" --solv 0.8.0""" output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8") assert "The analysis was completed successfully" in output def test_neg_optimizer_solc_settings(): file_dir = str(TESTDATA / "json_test_dir" / "dir_a") json_file_path = str(TESTDATA / "json_test_dir" / "test_file_disable.json") file_path = file_dir + "/input_file.sol" command = f"cd {file_dir} && python3 {MYTH} analyze {file_path} --solc-json {json_file_path} --solv 0.8.0" output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8") assert "Stack too deep when compiling inline assembly" in output def test_negative_solc_settings(): file_path = str(TESTDATA / "json_test_dir" / "dir_a" / "input_file.sol") command = f"python3 {MYTH} analyze {file_path} --solv 0.8.0" output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8") assert ( """ParserError: Source "@openzeppelin/contracts/token/PRC20/PRC20.sol""" in output ) ================================================ FILE: tests/integration_tests/src_mapping_test.py ================================================ from subprocess import STDOUT from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") def test_positive_solc_settings(): file_path = str(TESTDATA / "input_contracts" / "destruct_crlf.sol") command = f"python3 {MYTH} analyze {file_path} --solv 0.5.0" output = output_of(command, stderr=STDOUT) assert "selfdestruct(addr)" in output ================================================ FILE: tests/integration_tests/state_merge_tests.py ================================================ import os import subprocess import pytest from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") def output_with_stderr(command): return subprocess.run( command.split(" "), stdout=subprocess.PIPE, stderr=subprocess.PIPE ) testfile_path = os.path.split(__file__)[0] """ calls.bin is the bytecode of https://github.com/ConsenSys/mythril/blob/develop/solidity_examples/calls.sol """ swc_test_data = [ ("114", f"{TESTDATA}/inputs/calls.sol.o", (9, 5)), ] @pytest.mark.parametrize("swc, code, states_reduction", swc_test_data) def test_merge(swc, code, states_reduction): output = output_with_stderr( f"{MYTH} -v4 a -f {code} -t 1 --solver-timeout 500 -mUncheckedRetval --enable-state-merging" ) output_str = f"States reduced from {states_reduction[0]} to {states_reduction[1]}" assert output_str in output.stderr.decode("utf-8") ================================================ FILE: tests/integration_tests/summary_test.py ================================================ import json import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") test_data = ( # TODO: The commented tests should be sped up! # ( # "destruct.sol", # { # "TX_COUNT": 5, # "MODULE": "AccidentallyKillable", # "ISSUE_COUNT": 1, # "VERSION": "v0.5.0", # }, # ), # ( # "destruct.sol", # { # "TX_COUNT": 4, # "MODULE": "AccidentallyKillable", # "ISSUE_COUNT": 0, # "VERSION": "v0.5.0", # }, # ), ( "theft.sol", {"TX_COUNT": 4, "MODULE": "EtherThief", "ISSUE_COUNT": 1, "VERSION": "v0.5.0"}, ), ( "theft.sol", {"TX_COUNT": 3, "MODULE": "EtherThief", "ISSUE_COUNT": 0, "VERSION": "v0.5.0"}, ), ( "large.sol", { "TX_COUNT": 11, "MODULE": "AccidentallyKillable", "ISSUE_COUNT": 1, "VERSION": "v0.5.0", }, ), ( "large.sol", { "TX_COUNT": 10, "MODULE": "AccidentallyKillable", "ISSUE_COUNT": 0, "VERSION": "v0.5.0", }, ), ( "hash_test.sol", { "TX_COUNT": 2, "MODULE": "AccidentallyKillable", "ISSUE_COUNT": 1, "VERSION": "v0.4.24", }, ), ( "complex.sol", { "TX_COUNT": 2, "MODULE": "AccidentallyKillable", "ISSUE_COUNT": 1, "VERSION": "v0.5.0", }, ), ( "base_case.sol", { "TX_COUNT": 1, "MODULE": "AccidentallyKillable", "ISSUE_COUNT": 1, "VERSION": "v0.5.0", }, ), ( "simple_theft.sol", { "TX_COUNT": 1, "MODULE": "EtherThief", "ISSUE_COUNT": 0, "VERSION": "v0.5.0", }, ), ) @pytest.mark.parametrize("file_name, tx_data", test_data) def test_analysis(file_name, tx_data): file_path = str(TESTDATA / "input_contracts" / file_name) command = f"""python3 {MYTH} analyze {file_path} -t {tx_data["TX_COUNT"]} -o jsonv2 -m {tx_data["MODULE"]} --solver-timeout 60000 --solv {tx_data["VERSION"]} --execution-timeout 300 --enable-summaries""" output = json.loads(output_of(command)) assert len(output[0]["issues"]) == tx_data["ISSUE_COUNT"] ================================================ FILE: tests/integration_tests/transient_storage_test.py ================================================ import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") input_files = [ ("transient.sol", False), ("transient_bug.sol", True), ("transient_bug_2.sol", True), ("transient_recursive.sol", True), ] @pytest.mark.parametrize("file_name, expected_has_bug", input_files) def test_positive_solc_settings(file_name, expected_has_bug): file_path = str(TESTDATA / "input_contracts" / file_name) # Call the function you want to test command = f"python3 {MYTH} analyze {file_path} -mExceptions --solv 0.8.25" actual_output = output_of(command) # Assertion if expected_has_bug: assert "An assertion violation was triggered" in actual_output else: assert ( "The analysis was completed successfully. No issues were detected" in actual_output ) ================================================ FILE: tests/integration_tests/utils.py ================================================ from subprocess import CalledProcessError, check_output def output_of(command, stderr=None): """ :param command: :return: """ try: return check_output(command, shell=True, stderr=stderr).decode("UTF-8") except CalledProcessError as exc: return exc.output.decode("UTF-8") ================================================ FILE: tests/integration_tests/version_test.py ================================================ import pytest from utils import output_of from tests import PROJECT_DIR, TESTDATA MYTH = str(PROJECT_DIR / "myth") test_data = ( ("version_contract.sol", "v0.7.0", True), ("version_contract.sol", "v0.8.0", False), ("version_contract_0.8.0.sol", None, False), ("version_contract_0.7.0.sol", None, True), ("version_chaos.sol", None, True), ("version_2.sol", None, True), ("version_3.sol", None, True), ("version_4.sol", None, False), ("version_patch.sol", None, False), ("integer_edge_case.sol", None, True), ("integer_edge_case.sol", "v0.8.19", True), ) @pytest.mark.parametrize("file_name, version, has_overflow", test_data) def test_analysis(file_name, version, has_overflow): file = str(TESTDATA / "input_contracts" / file_name) if version: command = f"python3 {MYTH} analyze {file} --solv {version}" else: command = f"python3 {MYTH} analyze {file}" output = output_of(command) if has_overflow: assert "SWC ID: 101" in output else: assert ( "The analysis was completed successfully. No issues were detected." in output ) ================================================ FILE: tests/laser/Precompiles/blake2_test.py ================================================ import pytest from mythril.laser.ethereum.natives import blake2b_fcompress # Test cases taken from https://eips.ethereum.org/EIPS/eip-152. # One of the test case is expected to take a few hrs so I ignored it @pytest.mark.parametrize( "input_hex, expected_result", ( ("", ""), ( "00000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", # noqa: E501 "", ), ( "000000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", # noqa: E501 "", ), ( "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000002", # noqa: E501 "", ), ( "0000000048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", # noqa: E501 "08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d282e6ad7f520e511f6c3e2b8c68059b9442be0454267ce079217e1319cde05b", # noqa: E501 ), ( "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", # noqa: E501 "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", # noqa: E501 ), ( "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000", # noqa: E501 "75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d2875298743e7f6d5ea2f2d3e8d226039cd31b4e426ac4f2d3d666a610c2116fde4735", # noqa: E501 ), ( "0000000148c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", # noqa: E501 "b63a380cb2897d521994a85234ee2c181b5f844d2c624c002677e9703449d2fba551b3a8333bcdf5f2f7e08993d53923de3d64fcc68c034e717b9293fed7a421", # noqa: E501 ), ), ) def test_blake2(input_hex, expected_result): input_hex = bytearray.fromhex(input_hex) assert blake2b_fcompress(input_hex) == list(bytearray.fromhex(expected_result)) ================================================ FILE: tests/laser/Precompiles/ec_add_test.py ================================================ from unittest.mock import patch from eth_utils import decode_hex from py_ecc.optimized_bn128 import FQ from mythril.laser.ethereum.natives import ec_add VECTOR_A = decode_hex( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000020" "0000000000000000000000000000000000000000000000000000000000000020" "03" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" ) def test_ec_add_sanity(): assert ec_add(VECTOR_A) == [] @patch("mythril.laser.ethereum.natives.validate_point", return_value=1) @patch("mythril.laser.ethereum.natives.bn128.add", return_value=1) @patch("mythril.laser.ethereum.natives.bn128.normalize") def test_ec_add(f1, f2, f3): FQ.fielf_modulus = 128 a = FQ(val=1) f1.return_value = (a, a) assert ec_add(VECTOR_A) == ([0] * 31 + [1]) * 2 ================================================ FILE: tests/laser/Precompiles/ecrecover_test.py ================================================ import pytest from mythril.laser.ethereum.natives import NativeContractException, ecrecover from mythril.laser.smt import symbol_factory msg = b"\x6b\x8d\x2c\x81\xb1\x1b\x2d\x69\x95\x28\xdd\xe4\x88\xdb\xdf\x2f\x94\x29\x3d\x0d\x33\xc3\x2e\x34\x7f\x25\x5f\xa4\xa6\xc1\xf0\xa9" v = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c" r = b"\x53\x56\x92\x27\x4f\x15\x24\x34\x00\x2a\x7c\x4c\x7d\x7c\xd0\x16\xea\x3e\x2d\x70\x2f\x2d\x2f\xd5\xb3\x32\x64\x6a\x9e\x40\x9a\x6b" s = b"\x1f\x59\x24\xf5\x9c\x6d\x77\x66\xa6\x93\x17\xa3\xdf\x72\x9d\x8b\x61\x3c\x67\xaa\xf2\xfe\x06\x13\x39\x8b\x9f\x94\x4b\x98\x8e\xbd" GOOD_DATA = list(msg + v + r + s) @pytest.mark.parametrize( "input_list, expected_result", ( ([], []), ([10, 20], []), ( GOOD_DATA, [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 23, 8, 48, 142, 77, 185, 107, 254, 47, 229, 79, 224, 43, 181, 99, 36, 171, 166, 119, ], ), ), ) def test_ecrecover(input_list, expected_result): assert ecrecover(input_list) == expected_result def test_ecrecover_symbol(): input_list = ["bab", symbol_factory.BitVecSym("name", 256)] with pytest.raises(NativeContractException): ecrecover(input_list) ================================================ FILE: tests/laser/Precompiles/elliptic_curves_test.py ================================================ from unittest.mock import patch from py_ecc.optimized_bn128 import FQ from mythril.laser.ethereum.natives import ec_pair def test_ec_pair_192_check(): vec_c = [0] * 100 assert ec_pair(vec_c) == [] @patch("mythril.laser.ethereum.natives.validate_point", return_value=1) @patch("mythril.laser.ethereum.natives.bn128.is_on_curve", return_value=True) @patch("mythril.laser.ethereum.natives.bn128.pairing", return_value=1) @patch("mythril.laser.ethereum.natives.bn128.normalize") def test_ec_pair(f1, f2, f3, f4): FQ.fielf_modulus = 100 a = FQ(val=1) f1.return_value = (a, a) vec_c = [0] * 192 assert ec_pair(vec_c) == [0] * 31 + [1] @patch("mythril.laser.ethereum.natives.validate_point", return_value=False) def test_ec_pair_point_validation_failure(f1): vec_c = [0] * 192 assert ec_pair(vec_c) == [] @patch("mythril.laser.ethereum.natives.validate_point", return_value=1) def test_ec_pair_field_exceed_mod(f1): FQ.fielf_modulus = 100 a = FQ(val=1) f1.return_value = (a, a) vec_c = [10] * 192 assert ec_pair(vec_c) == [] ================================================ FILE: tests/laser/Precompiles/elliptic_mul_test.py ================================================ from unittest.mock import patch from eth_utils import decode_hex from py_ecc.optimized_bn128 import FQ from mythril.laser.ethereum.natives import ec_mul VECTOR_A = decode_hex( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000020" "0000000000000000000000000000000000000000000000000000000000000020" "03" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" ) @patch("mythril.laser.ethereum.natives.validate_point", return_value=1) @patch("mythril.laser.ethereum.natives.bn128.multiply", return_value=1) @patch("mythril.laser.ethereum.natives.bn128.normalize") def test_ec_mul(f1, f2, f3): FQ.fielf_modulus = 128 a = FQ(val=1) f1.return_value = (a, a) assert ec_mul(VECTOR_A) == ([0] * 31 + [1]) * 2 def test_ec_mul_validation_failure(): assert ec_mul(VECTOR_A) == [] ================================================ FILE: tests/laser/Precompiles/identity_test.py ================================================ import pytest from mythril.laser.ethereum.natives import identity @pytest.mark.parametrize( "input_list, expected_result", (([], []), ([10, 20], [10, 20])) ) def test_identity(input_list, expected_result): assert identity(input_list) == expected_result ================================================ FILE: tests/laser/Precompiles/mod_exp_test.py ================================================ import pytest from eth_utils import big_endian_to_int, decode_hex from mythril.laser.ethereum.natives import mod_exp EIP198_VECTOR_A = decode_hex( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000020" "0000000000000000000000000000000000000000000000000000000000000020" "03" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" ) EIP198_VECTOR_B = decode_hex( "0000000000000000000000000000000000000000000000000000000000000000" "0000000000000000000000000000000000000000000000000000000000000020" "0000000000000000000000000000000000000000000000000000000000000020" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" ) EIP198_VECTOR_C = decode_hex( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000002" "0000000000000000000000000000000000000000000000000000000000000020" "03" "ffff" "8000000000000000000000000000000000000000000000000000000000000000" "07" ) EIP198_VECTOR_D = decode_hex( "0000000000000000000000000000000000000000000000000000000000000001" "0000000000000000000000000000000000000000000000000000000000000002" "0000000000000000000000000000000000000000000000000000000000000020" "03" "ffff" "80" ) @pytest.mark.parametrize( "data,expected", ( (EIP198_VECTOR_A, 1), (EIP198_VECTOR_B, 0), ( EIP198_VECTOR_C, 26689440342447178617115869845918039756797228267049433585260346420242739014315, ), ( EIP198_VECTOR_D, 26689440342447178617115869845918039756797228267049433585260346420242739014315, ), ), ) def test_modexp_result(data, expected): actual = mod_exp(data) assert big_endian_to_int(actual) == expected ================================================ FILE: tests/laser/Precompiles/ripemd_test.py ================================================ import pytest from mythril.laser.ethereum.natives import NativeContractException, ripemd160 from mythril.laser.smt import symbol_factory @pytest.mark.parametrize( "input_list, expected_result", ( ( [], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 17, 133, 165, 197, 233, 252, 84, 97, 40, 8, 151, 126, 232, 245, 72, 178, 37, 141, 49, ], ), ( [10, 20], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 161, 226, 233, 76, 11, 228, 69, 224, 14, 89, 120, 246, 184, 197, 182, 35, 215, 51, 130, ], ), ), ) def test_ripemd160(input_list, expected_result): assert ripemd160(input_list) == expected_result def test_ripemd160_symbol(): input_list = ["bab", symbol_factory.BitVecSym("name", 256)] with pytest.raises(NativeContractException): ripemd160(input_list) ================================================ FILE: tests/laser/Precompiles/sha256_test.py ================================================ import pytest from mythril.laser.ethereum.natives import NativeContractException, sha256 from mythril.laser.smt import symbol_factory @pytest.mark.parametrize( "input_list, expected_result", ( ( [], [ 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, 153, 111, 185, 36, 39, 174, 65, 228, 100, 155, 147, 76, 164, 149, 153, 27, 120, 82, 184, 85, ], ), ( [10, 20], [ 195, 48, 250, 117, 58, 197, 190, 59, 143, 203, 82, 116, 80, 98, 247, 129, 204, 158, 15, 79, 169, 129, 162, 189, 6, 252, 185, 105, 53, 91, 148, 105, ], ), ), ) def test_sha256(input_list, expected_result): assert sha256(input_list) == expected_result def test_sha_symbol(): input_list = ["bab", symbol_factory.BitVecSym("name", 256)] with pytest.raises(NativeContractException): sha256(input_list) ================================================ FILE: tests/laser/__init__.py ================================================ ================================================ FILE: tests/laser/evm_testsuite/VMTests/LICENSE ================================================ Copyright 2014 Ethereum Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: tests/laser/evm_testsuite/VMTests/README.md ================================================ Files found in this directory are taken from https://github.com/ethereum/tests, released under the license LICENSE in the same directory as this file. All credit goes to the awesome people that made this! ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/add0.json ================================================ { "add0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/add0Filler.json", "sourceHash": "8ffcccd596ff216a8304f822e302bd7b2abe3f7f7616928a2a0385d2cfdf01ac" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/add1.json ================================================ { "add1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/add1Filler.json", "sourceHash": "36b138942544cd189bff05ff1694917ed4cef48760592536b2829f3e90d5850a" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "nonce": "0x00", "storage": { "0x00": "0x03" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/add2.json ================================================ { "add2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/add2Filler.json", "sourceHash": "c17fbe9e92877d5a60743ca4c172bba1060e20b08f9ee00ca0ccb6b72bac897f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/add3.json ================================================ { "add3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/add3Filler.json", "sourceHash": "d64685dfa395fd7dc69e5883eaedaeece8217daff0ad658a083dc2f2fc870ef1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000600001600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600001600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600001600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/add4.json ================================================ { "add4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/add4Filler.json", "sourceHash": "3b04e90121702949a56e656f4f895f5de3aed278fd3530eec4c52c378f41dcfa" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod0.json ================================================ { "addmod0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod0Filler.json", "sourceHash": "aba7a646dee5e90acf0c2257a986ff99d044f057de21667f2acec868f7d4b8eb" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026002600108600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026002600108600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026002600108600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod1.json ================================================ { "addmod1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod1Filler.json", "sourceHash": "edf8071d0533dd82ff2fb34b4caab47db62aa7d918004d82630cd2b37ddcbc90" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026002600003600160000308600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013860", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026002600003600160000308600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026002600003600160000308600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod1_overflow2.json ================================================ { "addmod1_overflow2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod1_overflow2Filler.json", "sourceHash": "9029d29f6ad3ad30d1cae39fe98723bb400f9fab4562bd7898a0168a0f353a3f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056000600160000308600055", "data": "0x", "gas": "0x2710", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x136e", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056000600160000308600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056000600160000308600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod1_overflow3.json ================================================ { "addmod1_overflow3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod1_overflow3Filler.json", "sourceHash": "f51942005cbb182f759380c7c7fa43d9666d8ea095cc9ce0538e04c2ffc2dd03" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056001600160000308600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef406", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056001600160000308600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056001600160000308600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod1_overflow4.json ================================================ { "addmod1_overflow4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod1_overflow4Filler.json", "sourceHash": "59184840928cfdb750aab06b0a42c30d4dc99a713f315239b1b6596ec9ef92c2" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056002600160000308600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef406", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056002600160000308600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056002600160000308600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod1_overflowDiff.json ================================================ { "addmod1_overflowDiff": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod1_overflowDiffFiller.json", "sourceHash": "4836017c5969c3cc9e6fee8a3da1e2d81454d2880d10fadd146cdb8ca8b57273" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056002600003600160000308600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef400", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056002600003600160000308600055", "nonce": "0x00", "storage": { "0x00": "0x04" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056002600003600160000308600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod2.json ================================================ { "addmod2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod2Filler.json", "sourceHash": "22a6b0713565860ede4858c04c85d823cc24829962730303aeb7bacf48e6e2af" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036001600660000308600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600660000308600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600660000308600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod2_0.json ================================================ { "addmod2_0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod2_0Filler.json", "sourceHash": "dc557aacebaa46b88f072e79ac09df8a576c1551f7ce3381bc22aa33a5fdfa7b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036001600660000308600360056000030714600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172ea", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600660000308600360056000030714600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600660000308600360056000030714600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod2_1.json ================================================ { "addmod2_1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod2_1Filler.json", "sourceHash": "f5227cd573f551a66a89ca6ef0075d999fa0dfcd1b6cc162deba46db3fc957ae" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036001600660000308600360056000030614600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013852", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600660000308600360056000030614600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600660000308600360056000030614600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod3.json ================================================ { "addmod3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod3Filler.json", "sourceHash": "98f42c19c4c02edb27ddbe15d425fa031f3b79998b3fcfce32ecbb070dca20f7" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036000036001600408600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036000036001600408600055", "nonce": "0x00", "storage": { "0x00": "0x05" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036000036001600408600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmod3_0.json ================================================ { "addmod3_0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmod3_0Filler.json", "sourceHash": "20e873a721f9d6c9a6808a017a7ddb48538f6e24e0ea5bb2e1e0d616aee00b1e" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026003600003600160040814600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172f8", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026003600003600160040814600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026003600003600160040814600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmodBigIntCast.json ================================================ { "addmodBigIntCast": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmodBigIntCastFiller.json", "sourceHash": "6425ea71989061d67059c0ff21a02ae588b5a1b7d69acab1136d8e5cd3341349" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600560017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmodDivByZero.json ================================================ { "addmodDivByZero": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmodDivByZeroFiller.json", "sourceHash": "ff8897ddc6eff1209bf12094e82e622ac4a2ecd6ce84ffdac4e4b1bf6c0a7bda" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006001600408600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600408600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600408600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmodDivByZero1.json ================================================ { "addmodDivByZero1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmodDivByZero1Filler.json", "sourceHash": "38ae4bc3d451120dcd38c38ede77bde9e767c64e25025a459233261ba101b05f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006001600008600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600008600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600008600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmodDivByZero2.json ================================================ { "addmodDivByZero2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmodDivByZero2Filler.json", "sourceHash": "433f565d64a9730f98cd80b4ae1510d496eba6a3a311c85c2d12394f3edd8cf3" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006000600108600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006000600108600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006000600108600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/addmodDivByZero3.json ================================================ { "addmodDivByZero3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/addmodDivByZero3Filler.json", "sourceHash": "f10de49a80343bfa59231702b9a2f7c500d1c000693005c39a82049ed55b62f8" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016000600060000803600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000600060000803600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000600060000803600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/arith1.json ================================================ { "arith1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/arith1Filler.json", "sourceHash": "26a824545a0d305ff19c0483bf52a65822c1df521fac97eac52902de884f2a5f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001600190016007026005016002900460049060016021900560150160030260059007600303600960110a60005260086000f3", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f41bf", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x0000000000000000", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600190016007026005016002900460049060016021900560150160030260059007600303600960110a60005260086000f3", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600190016007026005016002900460049060016021900560150160030260059007600303600960110a60005260086000f3", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/div1.json ================================================ { "div1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/div1Filler.json", "sourceHash": "159c0277fb5839d12de6e134cafe963c3b66c577959ad6c760d2c76af7f896c5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60027ffedcba9876543210fedcba9876543210fedcba9876543210fedcba98765432100460005260206000f3", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x018686", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x7f6e5d4c3b2a19087f6e5d4c3b2a19087f6e5d4c3b2a19087f6e5d4c3b2a1908", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60027ffedcba9876543210fedcba9876543210fedcba9876543210fedcba98765432100460005260206000f3", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60027ffedcba9876543210fedcba9876543210fedcba9876543210fedcba98765432100460005260206000f3", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divBoostBug.json ================================================ { "divBoostBug": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divBoostBugFiller.json", "sourceHash": "b572d1a3d37f2ac6255b64338654b664ae1e27b5da5a8ce7e337812f0ae357f5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7f01dae6076b981dae6076b981dae6076b981dae6076b981dae6076b981dae60777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba04600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f01dae6076b981dae6076b981dae6076b981dae6076b981dae6076b981dae60777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba04600055", "nonce": "0x00", "storage": { "0x00": "0x89" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f01dae6076b981dae6076b981dae6076b981dae6076b981dae6076b981dae60777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba04600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divByNonZero0.json ================================================ { "divByNonZero0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divByNonZero0Filler.json", "sourceHash": "de10028af4d71ec4eab4f19099b395e5a8ee65b3797507c5100574344f432a41" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6002600504600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6002600504600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6002600504600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divByNonZero1.json ================================================ { "divByNonZero1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divByNonZero1Filler.json", "sourceHash": "a10288727a8cd42937137db0964c54dfeb67031156d9e89c762c1ccf5400f46d" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6018601704600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6018601704600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6018601704600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divByNonZero2.json ================================================ { "divByNonZero2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divByNonZero2Filler.json", "sourceHash": "09b0a23cd19a08af2b97b1348b9c15ad0668dbb7f1303fc8c188edbfc532163c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6018600004600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6018600004600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6018600004600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divByNonZero3.json ================================================ { "divByNonZero3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divByNonZero3Filler.json", "sourceHash": "2421e4d08c24171e953eeb5b7e1e6f1db9a16a8d3160d4ab082401a379bcda37" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001600104600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600104600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600104600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divByZero.json ================================================ { "divByZero": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divByZeroFiller.json", "sourceHash": "d08e0f0e1b8a688776ad0772dcb91f93ce5320d0e8e34723139d20b3358234e1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000600204600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600204600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600204600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/divByZero_2.json ================================================ { "divByZero_2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/divByZero_2Filler.json", "sourceHash": "63a28c09a22266dc3c56fe10cf0542d7945ff53214deba17b511372c4d24fd29" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60076000600d0401600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60076000600d0401600055", "nonce": "0x00", "storage": { "0x00": "0x07" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60076000600d0401600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp0.json ================================================ { "exp0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp0Filler.json", "sourceHash": "d7bca8fc54c818174631d156150165cf8b3cb5b3275ee3f00aa651a9614a8b6b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600260020a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013863", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600260020a600055", "nonce": "0x00", "storage": { "0x00": "0x04" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600260020a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp1.json ================================================ { "exp1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp1Filler.json", "sourceHash": "790225dd362e72d2c03d6fb70e8f3d1b07c27ba502d3e4968d0584342925cf78" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01372d", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp2.json ================================================ { "exp2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp2Filler.json", "sourceHash": "048b0885d4cbf3735ed6d6ea4e70f6d2fcabf1ec0c797028859f0138485129c7" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x637fffffff637fffffff0a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013845", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x637fffffff637fffffff0a600055", "nonce": "0x00", "storage": { "0x00": "0xbc8cccccccc888888880000000aaaaaab00000000fffffffffffffff7fffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x637fffffff637fffffff0a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp3.json ================================================ { "exp3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp3Filler.json", "sourceHash": "0fb6a29eff8766b8b8e5d4bebd1bd26191382cf9a53fb082f318d835d3ef54ca" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x637fffffff60000a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172dd", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x637fffffff60000a600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x637fffffff60000a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp4.json ================================================ { "exp4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp4Filler.json", "sourceHash": "b0493347ef7099abaa8b086c34db3f90d32c3b1ba099799be4e6937f44707d84" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000637fffffff0a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386d", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000637fffffff0a600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000637fffffff0a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp5.json ================================================ { "exp5": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp5Filler.json", "sourceHash": "050d2365266bd54b09698870bf65e32e3aaabd28ae1edaf8df7162fbb707e810" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016101010a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013863", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016101010a600055", "nonce": "0x00", "storage": { "0x00": "0x0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016101010a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp6.json ================================================ { "exp6": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp6Filler.json", "sourceHash": "4534de4b71ac08f103de5d9c76546ede7925f520b88f5dbadca3ece614f19101" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x61010160010a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013859", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x61010160010a600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x61010160010a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp7.json ================================================ { "exp7": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp7Filler.json", "sourceHash": "caa58d4cf6deb6783a20c24ec41da247074d43a7038c9eca2ca0122f9c6a59f9" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x61010160020a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172f1", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x61010160020a600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x61010160020a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/exp8.json ================================================ { "exp8": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/exp8Filler.json", "sourceHash": "1cc9a393c6ceda35ec9afd4aca74145c1c244a0d4765ede3f473e0fd194ca595" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600060000a600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386d", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600060000a600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600060000a600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_0.json ================================================ { "expPowerOf256Of256_0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_0Filler.json", "sourceHash": "6863ca9c3ee1851b0b73bd28fd8f93247e10db38711c963874c5525fdde6e9a3" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006101000a6101000a600055600060ff0a6101000a60015560006101010a6101000a60025560006101000a60ff0a600355600060ff0a60ff0a60045560006101010a60ff0a60055560006101000a6101010a600655600060ff0a6101010a60075560006101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0c81a6", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006101000a6101000a600055600060ff0a6101000a60015560006101010a6101000a60025560006101000a60ff0a600355600060ff0a60ff0a60045560006101010a60ff0a60055560006101000a6101010a600655600060ff0a6101010a60075560006101010a6101010a600855", "nonce": "0x00", "storage": { "0x00": "0x0100", "0x01": "0x0100", "0x02": "0x0100", "0x03": "0xff", "0x04": "0xff", "0x05": "0xff", "0x06": "0x0101", "0x07": "0x0101", "0x08": "0x0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006101000a6101000a600055600060ff0a6101000a60015560006101010a6101000a60025560006101000a60ff0a600355600060ff0a60ff0a60045560006101010a60ff0a60055560006101000a6101010a600655600060ff0a6101010a60075560006101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_1.json ================================================ { "expPowerOf256Of256_1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_1Filler.json", "sourceHash": "69cfec5346c375b71292c83f0077c8db86c8046a52aed0700f70628c5de03cf7" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016101000a6101000a600055600160ff0a6101000a60015560016101010a6101000a60025560016101000a60ff0a600355600160ff0a60ff0a60045560016101010a60ff0a60055560016101000a6101010a600655600160ff0a6101010a60075560016101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d30d8", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016101000a6101000a600055600160ff0a6101000a60015560016101010a6101000a60025560016101000a60ff0a600355600160ff0a60ff0a60045560016101010a60ff0a60055560016101000a6101010a600655600160ff0a6101010a60075560016101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x06c3acd330b959ad6efabce6d2d2125e73a88a65a9880d203dddf5957f7f0001", "0x04": "0x8f965a06da0ac41dcb3a34f1d8ab7d8fee620a94faa42c395997756b007ffeff", "0x05": "0xbce9265d88a053c18bc229ebff404c1534e1db43de85131da0179fe9ff8100ff", "0x06": "0x02b5e9d7a094c19f5ebdd4f2e618f859ed15e4f1f0351f286bf849eb7f810001", "0x07": "0xc73b7a6f68385c653a24993bb72eea0e4ba17470816ec658cf9c5bedfd81ff01", "0x08": "0xb89fc178355660fe1c92c7d8ff11524702fad6e2255447946442356b00810101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016101000a6101000a600055600160ff0a6101000a60015560016101010a6101000a60025560016101000a60ff0a600355600160ff0a60ff0a60045560016101010a60ff0a60055560016101000a6101010a600655600160ff0a6101010a60075560016101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_10.json ================================================ { "expPowerOf256Of256_10": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_10Filler.json", "sourceHash": "4b8da51eee6773daecfe22bd2067c03bc00a82f27934f7b8053636433008d2fe" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600a6101000a6101000a600055600a60ff0a6101000a600155600a6101010a6101000a600255600a6101000a60ff0a600355600a60ff0a60ff0a600455600a6101010a60ff0a600555600a6101000a6101010a600655600a60ff0a6101010a600755600a6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2dae", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600a6101000a6101000a600055600a60ff0a6101000a600155600a6101010a6101000a600255600a6101000a60ff0a600355600a60ff0a60ff0a600455600a6101010a60ff0a600555600a6101000a6101010a600655600a60ff0a6101010a600755600a6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xfe0f60957dc223578a0298879ec55c33085514ff7f0000000000000000000001", "0x04": "0xc1ea45f348b5d351c4d8fe5c77da979cadc33d866acc42e981278896b1f600ff", "0x05": "0x56ddb29bca94fb986ac0a40188b3b53f3216b3559bd8324a77ea8bd8a80a00ff", "0x06": "0x2d49ff6b0bbe177ae9317000b68fb921f7aa6aff810000000000000000000001", "0x07": "0x185fa9eab94cfe3016b69657e83b23fd24cc6960218254231c3db627a7f60101", "0x08": "0xa7a0223829f26d6c635368034320563df4aa5eb62efc87a42bb35f69b20a0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600a6101000a6101000a600055600a60ff0a6101000a600155600a6101010a6101000a600255600a6101000a60ff0a600355600a60ff0a60ff0a600455600a6101010a60ff0a600555600a6101000a6101010a600655600a60ff0a6101010a600755600a6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_11.json ================================================ { "expPowerOf256Of256_11": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_11Filler.json", "sourceHash": "9f894285b221c629d940fd5717ca08b2f5f1e35b809191f00557ed3d1c76e01c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600b6101000a6101000a600055600b60ff0a6101000a600155600b6101010a6101000a600255600b6101000a60ff0a600355600b60ff0a60ff0a600455600b6101010a60ff0a600555600b6101000a6101010a600655600b60ff0a6101010a600755600b6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2d54", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600b6101000a6101000a600055600b60ff0a6101000a600155600b6101010a6101000a600255600b6101000a60ff0a600355600b60ff0a60ff0a600455600b6101010a60ff0a600555600b6101000a6101010a600655600b60ff0a6101010a600755600b6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xe1440264b8ee0cea0218879ec55c33085514ff7f000000000000000000000001", "0x04": "0x29575fdce377b23043e489e358581474bc863187fa85f9945473a2be5889feff", "0x05": "0x3df8c030ec521fb109c4d887dbbc14c7c9c9921b27058e3503971b60b18b00ff", "0x06": "0x67799740340daf4a30f000b68fb921f7aa6aff81000000000000000000000001", "0x07": "0x540a4e4635b40585e09ff10b63ffe310dd717fca5c0a51570091e25e378bff01", "0x08": "0xdbbaef5c49ffee61b08cde6ebc8dba6e9a62d56c2355d1980cb9e790bc8b0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600b6101000a6101000a600055600b60ff0a6101000a600155600b6101010a6101000a600255600b6101000a60ff0a600355600b60ff0a60ff0a600455600b6101010a60ff0a600555600b6101000a6101010a600655600b60ff0a6101010a600755600b6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_12.json ================================================ { "expPowerOf256Of256_12": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_12Filler.json", "sourceHash": "3f676ad5517e82148d0d2da5936d57a608e33179c423d4304a6fe825b5707548" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600c6101000a6101000a600055600c60ff0a6101000a600155600c6101010a6101000a600255600c6101000a60ff0a600355600c60ff0a60ff0a600455600c6101010a60ff0a600555600c6101000a6101010a600655600c60ff0a6101010a600755600c6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2cfa", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600c6101000a6101000a600055600c60ff0a6101000a600155600c6101010a6101000a600255600c6101000a60ff0a600355600c60ff0a60ff0a600455600c6101010a60ff0a600555600c6101000a6101010a600655600c60ff0a6101010a600755600c6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xb0e95b83a36ce98218879ec55c33085514ff7f00000000000000000000000001", "0x04": "0xc482ab56ec19186dc48c88f30861a850b2253b1ea6dc021589e569bd47f400ff", "0x05": "0xcf45c7f9af4bbe4a83055b55b97777ad5e0a3f08b129c9ae208c5d713c0c00ff", "0x06": "0xa5cbb62a421049b0f000b68fb921f7aa6aff8100000000000000000000000001", "0x07": "0x3bde6ca66dffe1bf5d727c3edea74c7a4af43b3912e6256d37705c8f3bf40101", "0x08": "0x3f49a1e40c5213aa4ffed57eb4c1ad2d181b2aaa289e9d59c2256c43480c0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600c6101000a6101000a600055600c60ff0a6101000a600155600c6101010a6101000a600255600c6101000a60ff0a600355600c60ff0a60ff0a600455600c6101010a60ff0a600555600c6101000a6101010a600655600c60ff0a6101010a600755600c6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_13.json ================================================ { "expPowerOf256Of256_13": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_13Filler.json", "sourceHash": "da54905daaeaa0664d44547ff55e475b07362ac581d4a395233ed5e2c6f52ced" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600d6101000a6101000a600055600d60ff0a6101000a600155600d6101010a6101000a600255600d6101000a60ff0a600355600d60ff0a60ff0a600455600d6101010a60ff0a600555600d6101000a6101010a600655600d60ff0a6101010a600755600d6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2ca0", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600d6101000a6101000a600055600d60ff0a6101000a600155600d6101010a6101000a600255600d6101000a60ff0a600355600d60ff0a60ff0a600455600d6101010a60ff0a600555600d6101000a6101010a600655600d60ff0a6101010a600755600d6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xe02639036c698218879ec55c33085514ff7f0000000000000000000000000001", "0x04": "0x8be664bde946d939ce551b948b503787942d2a7734509288c1b62fd5c48bfeff", "0x05": "0xa923a28e7a75aef26c51580ffc686879e4a0b404b089bdbcd751d88b478d00ff", "0x06": "0x41ac5ea30fc9b0f000b68fb921f7aa6aff810000000000000000000000000001", "0x07": "0x0daa3a177ec975cb69bb4acf4a6e1be7bcc1ad33d1ffad97510f9fea9d8dff01", "0x08": "0x19e6822beb889be28310060f4fb9741bfd50a31fa81ec65de21f7b02548d0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600d6101000a6101000a600055600d60ff0a6101000a600155600d6101010a6101000a600255600d6101000a60ff0a600355600d60ff0a60ff0a600455600d6101010a60ff0a600555600d6101000a6101010a600655600d60ff0a6101010a600755600d6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_14.json ================================================ { "expPowerOf256Of256_14": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_14Filler.json", "sourceHash": "edd3df91eb065b15cab5d220c3d106ed68ddaf58d6c58f53a8cd65b27d2b2581" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600e6101000a6101000a600055600e60ff0a6101000a600155600e6101010a6101000a600255600e6101000a60ff0a600355600e60ff0a60ff0a600455600e6101010a60ff0a600555600e6101000a6101010a600655600e60ff0a6101010a600755600e6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2c46", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600e6101000a6101000a600055600e60ff0a6101000a600155600e6101010a6101000a600255600e6101000a60ff0a600355600e60ff0a60ff0a600455600e6101010a60ff0a600555600e6101000a6101010a600655600e60ff0a6101010a600755600e6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xdb9902ec698218879ec55c33085514ff7f000000000000000000000000000001", "0x04": "0x83fab06c6c8fef761ebbb9534c06ac2a9d61820623008069062ff3b1e1f200ff", "0x05": "0x3f791dd183ed5b963bd86e0dba1a9dd5b8ceeb078f15c73062f1942fd40e00ff", "0x06": "0xe0bfa28fc9b0f000b68fb921f7aa6aff81000000000000000000000000000001", "0x07": "0x8133b760dfae27560eb490f235ddfa301f058dee4f01f3fe4b3567d0d3f20101", "0x08": "0xcd4cd0124e983af71620fb5f98275965c6a8bebc4b8adc288b63224ee20e0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600e6101000a6101000a600055600e60ff0a6101000a600155600e6101010a6101000a600255600e6101000a60ff0a600355600e60ff0a60ff0a600455600e6101010a60ff0a600555600e6101000a6101010a600655600e60ff0a6101010a600755600e6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_15.json ================================================ { "expPowerOf256Of256_15": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_15Filler.json", "sourceHash": "f7cb05c59e6a333a6f97a5d9f4c0f35af8d8422f06d1cfe1aa80a98c27f99ed1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600f6101000a6101000a600055600f60ff0a6101000a600155600f6101010a6101000a600255600f6101000a60ff0a600355600f60ff0a60ff0a600455600f6101010a60ff0a600555600f6101000a6101010a600655600f60ff0a6101010a600755600f6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2bec", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600f6101000a6101000a600055600f60ff0a6101000a600155600f6101010a6101000a600255600f6101000a60ff0a600355600f60ff0a60ff0a600455600f6101010a60ff0a600555600f6101000a6101010a600655600f60ff0a6101010a600755600f6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x9882ec698218879ec55c33085514ff7f00000000000000000000000000000001", "0x04": "0x75c4915e18b96704209738f5ca765568bb4dc4113d56683977825a132c8dfeff", "0x05": "0x5c76839bf5a80b1da705dbdf43e4dd6770cd7501af11ff2dab7918dfe18f00ff", "0x06": "0xbf228fc9b0f000b68fb921f7aa6aff8100000000000000000000000000000001", "0x07": "0xc6a29131e7594004bc2aa79f0d2c402a1409c57c77d284c14b1a3ab0ff8fff01", "0x08": "0xe6b3e5cf6ec90e532fef7d08455ebf92a03e9e3f6e224ea0febdf1a9f08f0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600f6101000a6101000a600055600f60ff0a6101000a600155600f6101010a6101000a600255600f6101000a60ff0a600355600f60ff0a60ff0a600455600f6101010a60ff0a600555600f6101000a6101010a600655600f60ff0a6101010a600755600f6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_16.json ================================================ { "expPowerOf256Of256_16": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_16Filler.json", "sourceHash": "df0ea880ab4d8279515ba63f5a4c098d3869d42a1145eee993bdb07d543191ac" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60106101000a6101000a600055601060ff0a6101000a60015560106101010a6101000a60025560106101000a60ff0a600355601060ff0a60ff0a60045560106101010a60ff0a60055560106101000a6101010a600655601060ff0a6101010a60075560106101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2b92", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60106101000a6101000a600055601060ff0a6101000a60015560106101010a6101000a60025560106101000a60ff0a600355601060ff0a60ff0a60045560106101010a60ff0a60055560106101000a6101010a600655601060ff0a6101010a60075560106101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x82ec698218879ec55c33085514ff7f0000000000000000000000000000000001", "0x04": "0x3122f4bcdf6dd8b265cd18eb6af28c879aed44a35e0bf59273e39e6c7ff000ff", "0x05": "0x6a2b3bc87a02c29b9d27757df43047ecd0f15485270fca27417a701c701000ff", "0x06": "0x228fc9b0f000b68fb921f7aa6aff810000000000000000000000000000000001", "0x07": "0x88e1259502eef93d46060aacc9e2ff506c734dade0b6714ab12d17e46ff00101", "0x08": "0x4a103813c12c12169b218296bb0a9eae80cf8d2b158aa70eb990f99480100101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60106101000a6101000a600055601060ff0a6101000a60015560106101010a6101000a60025560106101000a60ff0a600355601060ff0a60ff0a60045560106101010a60ff0a60055560106101000a6101010a600655601060ff0a6101010a60075560106101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_17.json ================================================ { "expPowerOf256Of256_17": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_17Filler.json", "sourceHash": "f070c654038863bc1be0d7f5a1f94d32eeae2548d2253bef46dd9153621c8d3a" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60116101000a6101000a600055601160ff0a6101000a60015560116101010a6101000a60025560116101000a60ff0a600355601160ff0a60ff0a60045560116101010a60ff0a60055560116101000a6101010a600655601160ff0a6101010a60075560116101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2b38", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60116101000a6101000a600055601160ff0a6101000a60015560116101010a6101000a60025560116101000a60ff0a600355601160ff0a60ff0a60045560116101010a60ff0a60055560116101000a6101010a600655601160ff0a6101010a60075560116101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xec698218879ec55c33085514ff7f000000000000000000000000000000000001", "0x04": "0x722ad218eb1995a2d257c4c06d8de993c203cfc8e3512df7d633e17e908ffeff", "0x05": "0x8ac9b5ec08d74612cb29f941481d274b51721af2296207c0da8d24667f9100ff", "0x06": "0x8fc9b0f000b68fb921f7aa6aff81000000000000000000000000000000000001", "0x07": "0x81d5ff63680841482299f3eab616446dcd336f537c0c565aa4112ab95d91ff01", "0x08": "0x9c6ca90dac4e97dea02ac969e8649ee9e6232e0c3f4797411151cb8f90910101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60116101000a6101000a600055601160ff0a6101000a60015560116101010a6101000a60025560116101000a60ff0a600355601160ff0a60ff0a60045560116101010a60ff0a60055560116101000a6101010a600655601160ff0a6101010a60075560116101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_18.json ================================================ { "expPowerOf256Of256_18": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_18Filler.json", "sourceHash": "8cb52e6bdf20dde0fbdfcfa1309199db454a3bea15b4695b2f19fc0de0eb7aca" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60126101000a6101000a600055601260ff0a6101000a60015560126101010a6101000a60025560126101000a60ff0a600355601260ff0a60ff0a60045560126101010a60ff0a60055560126101000a6101010a600655601260ff0a6101010a60075560126101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2ade", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60126101000a6101000a600055601260ff0a6101000a60015560126101010a6101000a60025560126101000a60ff0a600355601260ff0a60ff0a60045560126101010a60ff0a60055560126101000a6101010a600655601260ff0a6101010a60075560126101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x698218879ec55c33085514ff7f00000000000000000000000000000000000001", "0x04": "0x8a2cbd9f40794e2205b13306f2aa0a43c60823c64b95d8601fa4f1e521ee00ff", "0x05": "0xc1b5a1e3a81da51b10d84e880f0113ff67b863ddad3faf1f4ecf413f101200ff", "0x06": "0xc9b0f000b68fb921f7aa6aff8100000000000000000000000000000000000001", "0x07": "0x410be68e49452a1fbcd863bf6e8d637f8eae4979c34c88d552afbcc20fee0101", "0x08": "0xf540cb714754b5b1eb0373833833bd7fb0ee925ce8b92962500b7a1c22120101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60126101000a6101000a600055601260ff0a6101000a60015560126101010a6101000a60025560126101000a60ff0a600355601260ff0a60ff0a60045560126101010a60ff0a60055560126101000a6101010a600655601260ff0a6101010a60075560126101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_19.json ================================================ { "expPowerOf256Of256_19": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_19Filler.json", "sourceHash": "2bf12bb4afe51d507c22e76e8e5c567b0ef569281b1ebfd4045334c1da40bef5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60136101000a6101000a600055601360ff0a6101000a60015560136101010a6101000a60025560136101000a60ff0a600355601360ff0a60ff0a60045560136101010a60ff0a60055560136101000a6101010a600655601360ff0a6101010a60075560136101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2a84", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60136101000a6101000a600055601360ff0a6101000a60015560136101010a6101000a60025560136101000a60ff0a600355601360ff0a60ff0a60045560136101010a60ff0a60055560136101000a6101010a600655601360ff0a6101010a60075560136101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x8218879ec55c33085514ff7f0000000000000000000000000000000000000001", "0x04": "0xb795ad7ac24cfbb7435cf53bd3584f3d4b2709935635c3ceb66e761ff091feff", "0x05": "0x1f0bb7be91a0ccd0cca93d75cf03de3e6b56fe8f1c54242617665327219300ff", "0x06": "0xb0f000b68fb921f7aa6aff810000000000000000000000000000000000000001", "0x07": "0xad571756ecbff1bfdef064861e5e92c5d897a9cc380e54bdbaabd80bb793ff01", "0x08": "0xd8b5b531989e689f700dcdb43ab90e79a49dfbbb5a13dbf751df98bb34930101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60136101000a6101000a600055601360ff0a6101000a60015560136101010a6101000a60025560136101000a60ff0a600355601360ff0a60ff0a60045560136101010a60ff0a60055560136101000a6101010a600655601360ff0a6101010a60075560136101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_2.json ================================================ { "expPowerOf256Of256_2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_2Filler.json", "sourceHash": "1bb794ffa6e9ae153773b173b7a12dac12fac68c4ca5cda54e75173507967636" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026101000a6101000a600055600260ff0a6101000a60015560026101010a6101000a60025560026101000a60ff0a600355600260ff0a60ff0a60045560026101010a60ff0a60055560026101000a6101010a600655600260ff0a6101010a60075560026101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d307e", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026101000a6101000a600055600260ff0a6101000a60015560026101010a6101000a60025560026101000a60ff0a600355600260ff0a60ff0a60045560026101010a60ff0a60055560026101000a6101010a600655600260ff0a6101010a60075560026101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x4ee4ceeaac565c81f55a87c43f82f7c889ef4fc7c679671e28d594ff7f000001", "0x04": "0x82f46a1b4e34d66712910615d2571d75606ceac51fa8ca8c58cf6ca881fe00ff", "0x05": "0x81c9fcefa5de158ae2007f25d35c0d11cd735342a48905955a5a6852800200ff", "0x06": "0x666ac362902470ed850709e2a29969d10cba09debc03c38d172aeaff81000001", "0x07": "0xeb30a3c678a01bde914548f98f3366dc0ffe9f85384ebf1111d03dad7ffe0101", "0x08": "0x72d0a7939b6303ce1d46e6e3f1b8be303bfdb2b00f41ad8076b0975782020101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026101000a6101000a600055600260ff0a6101000a60015560026101010a6101000a60025560026101000a60ff0a600355600260ff0a60ff0a60045560026101010a60ff0a60055560026101000a6101010a600655600260ff0a6101010a60075560026101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_20.json ================================================ { "expPowerOf256Of256_20": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_20Filler.json", "sourceHash": "3e1e5001e4e59a393a85390f68cd05d35e46428201bde93b6f68ceb7ef9ec051" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60146101000a6101000a600055601460ff0a6101000a60015560146101010a6101000a60025560146101000a60ff0a600355601460ff0a60ff0a60045560146101010a60ff0a60055560146101000a6101010a600655601460ff0a6101010a60075560146101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2a2a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60146101000a6101000a600055601460ff0a6101000a60015560146101010a6101000a60025560146101000a60ff0a600355601460ff0a60ff0a60045560146101010a60ff0a60055560146101000a6101010a600655601460ff0a6101010a60075560146101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x18879ec55c33085514ff7f000000000000000000000000000000000000000001", "0x04": "0x67e4797dc21f02ce4a7c52218c7dbea5d212e6c244e24f0ba4c08613c7ec00ff", "0x05": "0xa1ce1a085f258785846939cc1d2e8725ac94ad4dff8913234e00679fb41400ff", "0x06": "0xf000b68fb921f7aa6aff81000000000000000000000000000000000000000001", "0x07": "0xcce501857a1cb45473915a28082af950e0f78f7e2de68ce748adb661b3ec0101", "0x08": "0x3b2e28d274a16c08b58a23bad63bba6d7b09685769d1f68ca3873bedc8140101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60146101000a6101000a600055601460ff0a6101000a60015560146101010a6101000a60025560146101000a60ff0a600355601460ff0a60ff0a60045560146101010a60ff0a60055560146101000a6101010a600655601460ff0a6101010a60075560146101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_21.json ================================================ { "expPowerOf256Of256_21": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_21Filler.json", "sourceHash": "ce52da9057e3fa7d2cd345a3397d93afefa12c7879817ff918ce958ab90f2595" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60156101000a6101000a600055601560ff0a6101000a60015560156101010a6101000a60025560156101000a60ff0a600355601560ff0a60ff0a60045560156101010a60ff0a60055560156101000a6101010a600655601560ff0a6101010a60075560156101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d29d0", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60156101000a6101000a600055601560ff0a6101000a60015560156101010a6101000a60025560156101000a60ff0a600355601560ff0a60ff0a60045560156101010a60ff0a60055560156101000a6101010a600655601560ff0a6101010a60075560156101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x879ec55c33085514ff7f00000000000000000000000000000000000000000001", "0x04": "0x7fd07055ff50cdfe4b4bd9a15133d72d3607d92eb7ac81bac93db7ff4c93feff", "0x05": "0x665ac5c769e87f61d5993abc26522fbfca2734d76a63216b2d550d29c79500ff", "0x06": "0xb68fb921f7aa6aff8100000000000000000000000000000000000000000001", "0x07": "0x1c93db67c9884bc694686d69a25a5d7ed089841d5ce147fdd7199ab00d95ff01", "0x08": "0x485053d8ff66be52036597520344fac87b6a305426a9e49221d3f934dc950101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60156101000a6101000a600055601560ff0a6101000a60015560156101010a6101000a60025560156101000a60ff0a600355601560ff0a60ff0a60045560156101010a60ff0a60055560156101000a6101010a600655601560ff0a6101010a60075560156101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_22.json ================================================ { "expPowerOf256Of256_22": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_22Filler.json", "sourceHash": "b568d0b177c9f22d73b46e92e6fc973e292a6406e5c0fd774c4d62ffd1323a56" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60166101000a6101000a600055601660ff0a6101000a60015560166101010a6101000a60025560166101000a60ff0a600355601660ff0a60ff0a60045560166101010a60ff0a60055560166101000a6101010a600655601660ff0a6101010a60075560166101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2976", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60166101000a6101000a600055601660ff0a6101000a60015560166101010a6101000a60025560166101000a60ff0a600355601660ff0a60ff0a60045560166101010a60ff0a60055560166101000a6101010a600655601660ff0a6101010a60075560166101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x9ec55c33085514ff7f0000000000000000000000000000000000000000000001", "0x04": "0xec447e662ac08957d7e290a421dbf54c0aaf43aadc9cc465ad0b02f071ea00ff", "0x05": "0xdc9178d3bab470096f01477c859b5f4173986640b659426412a653465c1600ff", "0x06": "0xb68fb921f7aa6aff810000000000000000000000000000000000000000000001", "0x07": "0xdcf0a770777610503596ae0311af46c171151ed45107d7e7bb8f74bb5bea0101", "0x08": "0x4d65773387993928c95c861274232d3fb6f6b7fe1b22e4e61a30e71172160101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60166101000a6101000a600055601660ff0a6101000a60015560166101010a6101000a60025560166101000a60ff0a600355601660ff0a60ff0a60045560166101010a60ff0a60055560166101000a6101010a600655601660ff0a6101010a60075560166101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_23.json ================================================ { "expPowerOf256Of256_23": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_23Filler.json", "sourceHash": "38af599c5f1710b1d7c98da78bf0c4426b7fd2c3ea8afe4272147706a93b231b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60176101000a6101000a600055601760ff0a6101000a60015560176101010a6101000a60025560176101000a60ff0a600355601760ff0a60ff0a60045560176101010a60ff0a60055560176101000a6101010a600655601760ff0a6101010a60075560176101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d291c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60176101000a6101000a600055601760ff0a6101000a60015560176101010a6101000a60025560176101000a60ff0a600355601760ff0a60ff0a60045560176101010a60ff0a60055560176101000a6101010a600655601760ff0a6101010a60075560176101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xc55c33085514ff7f000000000000000000000000000000000000000000000001", "0x04": "0x537ca0f03f974303005f1e6693b55b72315a166841732e42b8353724a495feff", "0x05": "0x86418797ec60058de6cca47dfdbee79923ac49d7801e01840041ca76719700ff", "0x06": "0x8fb921f7aa6aff81000000000000000000000000000000000000000000000001", "0x07": "0x56a55341ab8d4318f1cfb55d5f21e2ba35d7e070a72bac6b2b21baae5f97ff01", "0x08": "0x55ddd0ec77909de6d8311116cf520398e816f928b06fdd90ec239d0488970101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60176101000a6101000a600055601760ff0a6101000a60015560176101010a6101000a60025560176101000a60ff0a600355601760ff0a60ff0a60045560176101010a60ff0a60055560176101000a6101010a600655601760ff0a6101010a60075560176101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_24.json ================================================ { "expPowerOf256Of256_24": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_24Filler.json", "sourceHash": "b2214b33d3fab1dfe04637edd51f67ec988e5bc2cbf134113adca7a36b73580b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60186101000a6101000a600055601860ff0a6101000a60015560186101010a6101000a60025560186101000a60ff0a600355601860ff0a60ff0a60045560186101010a60ff0a60055560186101000a6101010a600655601860ff0a6101010a60075560186101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d28c2", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60186101000a6101000a600055601860ff0a6101000a60015560186101010a6101000a60025560186101000a60ff0a600355601860ff0a60ff0a60045560186101010a60ff0a60055560186101000a6101010a600655601860ff0a6101010a60075560186101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x5c33085514ff7f00000000000000000000000000000000000000000000000001", "0x04": "0xd542e526003539ead104274aff2d78332366e29d328c2161f0c120731fe800ff", "0x05": "0xc706cb25e8384ce9bb5c9cb48415238ba03e16c448e292c0a101843b081800ff", "0x06": "0xb921f7aa6aff8100000000000000000000000000000000000000000000000001", "0x07": "0x4ca55f89202c524cb0f1cb3195d13c8d94a9f7a05c59e1d4031577c707e80101", "0x08": "0x8c4b0574e9156b80035f3ecdcf1fe79d273ed7559747a4322bcd338f20180101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60186101000a6101000a600055601860ff0a6101000a60015560186101010a6101000a60025560186101000a60ff0a600355601860ff0a60ff0a60045560186101010a60ff0a60055560186101000a6101010a600655601860ff0a6101010a60075560186101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_25.json ================================================ { "expPowerOf256Of256_25": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_25Filler.json", "sourceHash": "74d1ad702e512305c9b820a2f64cff06cf51504b5d46fd73aee35f186e64f053" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60196101000a6101000a600055601960ff0a6101000a60015560196101010a6101000a60025560196101000a60ff0a600355601960ff0a60ff0a60045560196101010a60ff0a60055560196101000a6101010a600655601960ff0a6101010a60075560196101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2868", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60196101000a6101000a600055601960ff0a6101000a60015560196101010a6101000a60025560196101000a60ff0a600355601960ff0a60ff0a60045560196101010a60ff0a60055560196101000a6101010a600655601960ff0a6101010a60075560196101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x33085514ff7f0000000000000000000000000000000000000000000000000001", "0x04": "0x7f510dd7198cac0a92ff7ea80451838c0dfa12114c41a0ef05907397f897feff", "0x05": "0x1275e752b6aee228ecba5e9b57ef1111deff3c651e2cfbf2cccd13151f9900ff", "0x06": "0x21f7aa6aff810000000000000000000000000000000000000000000000000001", "0x07": "0x6646340ad51a03bb710caf05756b685b33c7dad62ae68d369243700ead99ff01", "0x08": "0x29d80e8060ef2221929bb18215586c742686d6860e028ca0456b443238990101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60196101000a6101000a600055601960ff0a6101000a60015560196101010a6101000a60025560196101000a60ff0a600355601960ff0a60ff0a60045560196101010a60ff0a60055560196101000a6101010a600655601960ff0a6101010a60075560196101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_26.json ================================================ { "expPowerOf256Of256_26": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_26Filler.json", "sourceHash": "f8cd2c9613fe495b1e4350181fb338743a9b059ec738b292702e62a997f0411f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601a6101000a6101000a600055601a60ff0a6101000a600155601a6101010a6101000a600255601a6101000a60ff0a600355601a60ff0a60ff0a600455601a6101010a60ff0a600555601a6101000a6101010a600655601a60ff0a6101010a600755601a6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d280e", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601a6101000a6101000a600055601a60ff0a6101000a600155601a6101010a6101000a600255601a6101000a60ff0a600355601a60ff0a60ff0a600455601a6101010a60ff0a600555601a6101000a6101010a600655601a60ff0a6101010a600755601a6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x085514ff7f000000000000000000000000000000000000000000000000000001", "0x04": "0x1d164db738eb6893868b361ad2803f97be35764456e82a837667a693d1e600ff", "0x05": "0x8b92c24abebf376a5aab5ff4dfd3538a03d38a10bced2aae8e1a8a85b81a00ff", "0x06": "0xf7aa6aff81000000000000000000000000000000000000000000000000000001", "0x07": "0x6931bda98c70e860a1f6a5224940f1ec7e6734cd9456c95806384f7cb7e60101", "0x08": "0x3402a9db66492dfc2a220715e76243469462f24edc56903ba1d8e96ed21a0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601a6101000a6101000a600055601a60ff0a6101000a600155601a6101010a6101000a600255601a6101000a60ff0a600355601a60ff0a60ff0a600455601a6101010a60ff0a600555601a6101000a6101010a600655601a60ff0a6101010a600755601a6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_27.json ================================================ { "expPowerOf256Of256_27": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_27Filler.json", "sourceHash": "58b69b876666593f06ee8e5fef2f9fc078908f419ce364fe9dedf5acffeea71e" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601b6101000a6101000a600055601b60ff0a6101000a600155601b6101010a6101000a600255601b6101000a60ff0a600355601b60ff0a60ff0a600455601b6101010a60ff0a600555601b6101000a6101010a600655601b60ff0a6101010a600755601b6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d27b4", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601b6101000a6101000a600055601b60ff0a6101000a600155601b6101010a6101000a600255601b6101000a60ff0a600355601b60ff0a60ff0a600455601b6101010a60ff0a600555601b6101000a6101010a600655601b60ff0a6101010a600755601b6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x5514ff7f00000000000000000000000000000000000000000000000000000001", "0x04": "0x178918ffbcb401d4efd2f7dfb4d01a897172267f0f491121ac52dd614899feff", "0x05": "0x38ecff71480ca0b422f2ed6f780d5fead2ae234a49104b10a86f7f0dd19b00ff", "0x06": "0xaa6aff8100000000000000000000000000000000000000000000000000000001", "0x07": "0xd02811cb5dc1d80567e810532b235b7672f5c78cd6e89bb511d5e2d8f79bff01", "0x08": "0x1b4e6404f474c18055d30bb8987672f59e97980d6f9de1764c0fbec5ec9b0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601b6101000a6101000a600055601b60ff0a6101000a600155601b6101010a6101000a600255601b6101000a60ff0a600355601b60ff0a60ff0a600455601b6101010a60ff0a600555601b6101000a6101010a600655601b60ff0a6101010a600755601b6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_28.json ================================================ { "expPowerOf256Of256_28": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_28Filler.json", "sourceHash": "7c777e8ac6e44db49986159099879a393d4d1e24a134a942bc56e9a3f645f441" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601c6101000a6101000a600055601c60ff0a6101000a600155601c6101010a6101000a600255601c6101000a60ff0a600355601c60ff0a60ff0a600455601c6101010a60ff0a600555601c6101000a6101010a600655601c60ff0a6101010a600755601c6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d275a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601c6101000a6101000a600055601c60ff0a6101000a600155601c6101010a6101000a600255601c6101000a60ff0a600355601c60ff0a60ff0a600455601c6101010a60ff0a600555601c6101000a6101010a600655601c60ff0a6101010a600755601c6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x14ff7f0000000000000000000000000000000000000000000000000000000001", "0x04": "0xffd368e44b3f85cb81ae394c9809ca9fa2db46a83d7880a912ab6d4a87e400ff", "0x05": "0x0981ad53c19b15a94bcf0bf20235dd0da9df25f46ae635029fe2062e6c1c00ff", "0x06": "0x6aff810000000000000000000000000000000000000000000000000000000001", "0x07": "0x19df06ffa28250867006726405fbc05d43dc2f9d2f025006db089bd46be40101", "0x08": "0x243fffe3a4f2982f45055c08f379648ab886da8027a7401117a8e0b8881c0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601c6101000a6101000a600055601c60ff0a6101000a600155601c6101010a6101000a600255601c6101000a60ff0a600355601c60ff0a60ff0a600455601c6101010a60ff0a600555601c6101000a6101010a600655601c60ff0a6101010a600755601c6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_29.json ================================================ { "expPowerOf256Of256_29": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_29Filler.json", "sourceHash": "b0d3a0e97954254e535a7cba322485f664e2915eadb53a97e9294808bb5736e5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601d6101000a6101000a600055601d60ff0a6101000a600155601d6101010a6101000a600255601d6101000a60ff0a600355601d60ff0a60ff0a600455601d6101010a60ff0a600555601d6101000a6101010a600655601d60ff0a6101010a600755601d6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2700", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601d6101000a6101000a600055601d60ff0a6101000a600155601d6101010a6101000a600255601d6101000a60ff0a600355601d60ff0a60ff0a600455601d6101010a60ff0a600555601d6101000a6101010a600655601d60ff0a6101010a600755601d6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xff7f000000000000000000000000000000000000000000000000000000000001", "0x04": "0x41e065d46e0349cfe624c4e8a2034aea1f7edfff80e511cd8067d488949bfeff", "0x05": "0xa84162ca6675a22c4c79dfc4ea15f760db5a04dbf04246764199b668879d00ff", "0x06": "0xff81000000000000000000000000000000000000000000000000000000000001", "0x07": "0x1226984faa6b05ebdbd45d8477fa4fd5b55bfd5061de03c319282b153d9dff01", "0x08": "0x5cc9e6b0b749fd94541ad00364bdec2fca7816981ca3e38f485decc7a49d0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601d6101000a6101000a600055601d60ff0a6101000a600155601d6101010a6101000a600255601d6101000a60ff0a600355601d60ff0a60ff0a600455601d6101010a60ff0a600555601d6101000a6101010a600655601d60ff0a6101010a600755601d6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_3.json ================================================ { "expPowerOf256Of256_3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_3Filler.json", "sourceHash": "53999523fa8817e9744f5212cb80074bff9d270fa6581d7d88ed73920d414ab2" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036101000a6101000a600055600360ff0a6101000a60015560036101010a6101000a60025560036101000a60ff0a600355600360ff0a60ff0a60045560036101010a60ff0a60055560036101000a6101010a600655600360ff0a6101010a60075560036101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d3024", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036101000a6101000a600055600360ff0a6101000a60015560036101010a6101000a60025560036101000a60ff0a600355600360ff0a60ff0a60045560036101010a60ff0a60055560036101000a6101010a600655600360ff0a6101010a60075560036101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x109a00e1370d2d2922bf892e85becb54297354b2e5c75388d514ff7f00000001", "0x04": "0x54a792f15e9aba7e4ad9e716bc169eea3a6e2e9c49bf9b335874613c8081feff", "0x05": "0x5d24a14d8e5e039372cd0f6a0f31e9ed6b75adba9f16b1c5b3edd5ba818300ff", "0x06": "0x298e2f316b4ccded5ebf515998d9ec20df69404b04a441782a6aff8100000001", "0x07": "0x4335694e98f372183c62a2339fa4ad161e9b4c42240bdc9452abffd07783ff01", "0x08": "0xf0f0820797315acd063056bba76f6a9c3e281cdb5197a233967ca94684830101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036101000a6101000a600055600360ff0a6101000a60015560036101010a6101000a60025560036101000a60ff0a600355600360ff0a60ff0a60045560036101010a60ff0a60055560036101000a6101010a600655600360ff0a6101010a60075560036101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_30.json ================================================ { "expPowerOf256Of256_30": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_30Filler.json", "sourceHash": "804f4e95e384d6edbff23e904b20f47e7fa056744a955a10e0a41c32a620f7a1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601e6101000a6101000a600055601e60ff0a6101000a600155601e6101010a6101000a600255601e6101000a60ff0a600355601e60ff0a60ff0a600455601e6101010a60ff0a600555601e6101000a6101010a600655601e60ff0a6101010a600755601e6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d26a6", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601e6101000a6101000a600055601e60ff0a6101000a600155601e6101010a6101000a600255601e6101000a60ff0a600355601e60ff0a60ff0a600455601e6101010a60ff0a600555601e6101000a6101010a600655601e60ff0a6101010a600755601e6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x7f00000000000000000000000000000000000000000000000000000000000001", "0x04": "0xe9772778f50fa0a69cd10fa019ac56d72ac7a7d7af26c4ba28415c8f41e200ff", "0x05": "0x33f0385ef73feebdb952e5adb643dd0fa178fd9271578219ad50a73d241e00ff", "0x06": "0x8100000000000000000000000000000000000000000000000000000000000001", "0x07": "0xfd405cce8f73dffc04a6f0ff6ffc6bf7961876d09c5b4933a68f0cc623e20101", "0x08": "0xc5a8f4566fd2e96e4ce3a8b3ec0863e7b20bc3b2f3dc5261ba8a0174421e0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601e6101000a6101000a600055601e60ff0a6101000a600155601e6101010a6101000a600255601e6101000a60ff0a600355601e60ff0a60ff0a600455601e6101010a60ff0a600555601e6101000a6101010a600655601e60ff0a6101010a600755601e6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_31.json ================================================ { "expPowerOf256Of256_31": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_31Filler.json", "sourceHash": "bae9acb496c84a8fcc457a184519f0b42a40f8c0bb9c606c32a4c0e6cc73bc5c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601f6101000a6101000a600055601f60ff0a6101000a600155601f6101010a6101000a600255601f6101000a60ff0a600355601f60ff0a60ff0a600455601f6101010a60ff0a600555601f6101000a6101010a600655601f60ff0a6101010a600755601f6101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d264c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601f6101000a6101000a600055601f60ff0a6101000a600155601f6101010a6101000a600255601f6101000a60ff0a600355601f60ff0a60ff0a600455601f6101010a60ff0a600555601f6101000a6101010a600655601f60ff0a6101010a600755601f6101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x01", "0x04": "0xf9cb87f5b1ab58602f52a1e9d392e5675b86a59a53943a8d4ec2a915dc9dfeff", "0x05": "0x893d729a64e318860ec5047e70e598da163eb41e71e74b04dfd4712d419f00ff", "0x06": "0x01", "0x07": "0xee5f2839c1b4f6ca05e6fdb04e2fb49c0f860b3765c27dc781a150cb7f9fff01", "0x08": "0xb4c358e3c6bcddfb509ea487d733df0e1854f29c3b6bfd4a8caabe3f609f0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601f6101000a6101000a600055601f60ff0a6101000a600155601f6101010a6101000a600255601f6101000a60ff0a600355601f60ff0a60ff0a600455601f6101010a60ff0a600555601f6101000a6101010a600655601f60ff0a6101010a600755601f6101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_32.json ================================================ { "expPowerOf256Of256_32": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_32Filler.json", "sourceHash": "f566ebbbcb84fc96179f87b08deeacd0d2819c3be9ffc463c64b98dc94d9eb70" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60206101000a6101000a600055602060ff0a6101000a60015560206101010a6101000a60025560206101000a60ff0a600355602060ff0a60ff0a60045560206101010a60ff0a60055560206101000a6101010a600655602060ff0a6101010a60075560206101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0cef56", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60206101000a6101000a600055602060ff0a6101000a60015560206101010a6101000a60025560206101000a60ff0a600355602060ff0a60ff0a60045560206101010a60ff0a60055560206101000a6101010a600655602060ff0a6101010a60075560206101010a6101010a600855", "nonce": "0x00", "storage": { "0x00": "0x01", "0x03": "0x01", "0x04": "0xb8247842bb5ce75c08d0c251669ed5870fa24a22952e5db3a7c66c59ffe000ff", "0x05": "0xee526e5a06f2a990b2bf6c951e5feabf0e07ee16877296e1be872db9e02000ff", "0x06": "0x01", "0x07": "0xeda7d024b6de40a9d3b966e71f10a4667edc5b71cab07aeabcac6249dfe00101", "0x08": "0x512ecfaeeb11205f0833e1054dcb1300488e0954be5af77a49e143aa00200101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60206101000a6101000a600055602060ff0a6101000a60015560206101010a6101000a60025560206101000a60ff0a600355602060ff0a60ff0a60045560206101010a60ff0a60055560206101000a6101010a600655602060ff0a6101010a60075560206101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_33.json ================================================ { "expPowerOf256Of256_33": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_33Filler.json", "sourceHash": "62951920849f41acd9c64c96645f372cc099f52e21f802d21f04a76e47dcca8d" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60216101000a6101000a600055602160ff0a6101000a60015560216101010a6101000a60025560216101000a60ff0a600355602160ff0a60ff0a60045560216101010a60ff0a60055560216101000a6101010a600655602160ff0a6101010a60075560216101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0cef56", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60216101000a6101000a600055602160ff0a6101000a60015560216101010a6101000a60025560216101000a60ff0a600355602160ff0a60ff0a60045560216101010a60ff0a60055560216101000a6101010a600655602160ff0a6101010a60075560216101010a6101010a600855", "nonce": "0x00", "storage": { "0x00": "0x01", "0x03": "0x01", "0x04": "0x8dcb65b5494eba78cd6756a6f9851f6e26d0f2bb9ecd7e9abd7e9b11209ffeff", "0x05": "0x6694bb31b20cd625f3756897dae6d738f2e64467b5b6f10fa3e07763ffa100ff", "0x06": "0x01", "0x07": "0xe678999aeffd1f1f45081f64de7f80ab083dd7df04721ed64ee04c03bda1ff01", "0x08": "0x39b68fb9898dd7568abd178397251ce8226a25c1d305a4e79573333520a10101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60216101000a6101000a600055602160ff0a6101000a60015560216101010a6101000a60025560216101000a60ff0a600355602160ff0a60ff0a60045560216101010a60ff0a60055560216101000a6101010a600655602160ff0a6101010a60075560216101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_4.json ================================================ { "expPowerOf256Of256_4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_4Filler.json", "sourceHash": "9e89b6c7017914475e04d79e5d288d291131826bc9eed968aa011e9d948bf772" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60046101000a6101000a600055600460ff0a6101000a60015560046101010a6101000a60025560046101000a60ff0a600355600460ff0a60ff0a60045560046101010a60ff0a60055560046101000a6101010a600655600460ff0a6101010a60075560046101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2fca", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60046101000a6101000a600055600460ff0a6101000a60015560046101010a6101000a60025560046101000a60ff0a600355600460ff0a60ff0a60045560046101010a60ff0a60055560046101000a6101010a600655600460ff0a6101010a60075560046101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xe6540ce46eaf70da9d644015a661e0e245b13f307cb3885514ff7f0000000001", "0x04": "0x6526b38b05a6325b80e1c84ab41dc934fd70f33f1bd0eab3d1f61a4707fc00ff", "0x05": "0xe959516cd27e5d8fd487b72db2989b3ec2ba9fb7ead41554526fe5a3040400ff", "0x06": "0xe7498a48c6ce2530bbe814ee3440c8c44fffab7ad8a277aa6aff810000000001", "0x07": "0x2dffa3e901e5a392d15b79f4193d2168147d2aa7c55870b46c3a905d03fc0101", "0x08": "0xe16ea721c96539edb4f7fb82de0dad8cccb1e7a6966a6777635f6fb908040101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60046101000a6101000a600055600460ff0a6101000a60015560046101010a6101000a60025560046101000a60ff0a600355600460ff0a60ff0a60045560046101010a60ff0a60055560046101000a6101010a600655600460ff0a6101010a60075560046101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_5.json ================================================ { "expPowerOf256Of256_5": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_5Filler.json", "sourceHash": "d81389f12c21ff3e30ea2020d3dd5d086364da646e9fe273b4ad9f954f06ec60" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056101000a6101000a600055600560ff0a6101000a60015560056101010a6101000a60025560056101000a60ff0a600355600560ff0a60ff0a60045560056101010a60ff0a60055560056101000a6101010a600655600560ff0a6101010a60075560056101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2f70", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056101000a6101000a600055600560ff0a6101000a60015560056101010a6101000a60025560056101000a60ff0a600355600560ff0a60ff0a60045560056101010a60ff0a60055560056101000a6101010a600655600560ff0a6101010a60075560056101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0xb581ac185aad71db2d177c286929c4c22809e5dcb3085514ff7f000000000001", "0x04": "0x75789eb2a64bc971389fbd11a1e6d7abbf95ad25e23fb9aa25e73a0bfc83feff", "0x05": "0xfc403fa42ceb6a0d0d3321bd9b2d8af25b1b667f87a04f496c78168d078500ff", "0x06": "0xcec5ec213b9cb5811f6ae00428fd7b6ef5a1af39a1f7aa6aff81000000000001", "0x07": "0x70ab32233202b98d382d17713fa0be391eaf74f85ba1740c9c3238c4ed85ff01", "0x08": "0xb622672a213faa79b32185ff93a7b27a8499e48f7b032cdb4d1a70300c850101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056101000a6101000a600055600560ff0a6101000a60015560056101010a6101000a60025560056101000a60ff0a600355600560ff0a60ff0a60045560056101010a60ff0a60055560056101000a6101010a600655600560ff0a6101010a60075560056101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_6.json ================================================ { "expPowerOf256Of256_6": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_6Filler.json", "sourceHash": "d7294bb173d18f88acc0e8b342fe20037ce735b0eabab1ee878b6cccd909dd69" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60066101000a6101000a600055600660ff0a6101000a60015560066101010a6101000a60025560066101000a60ff0a600355600660ff0a60ff0a60045560066101010a60ff0a60055560066101000a6101010a600655600660ff0a6101010a60075560066101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2f16", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60066101000a6101000a600055600660ff0a6101000a60015560066101010a6101000a60025560066101000a60ff0a600355600660ff0a60ff0a60045560066101010a60ff0a60055560066101000a6101010a600655600660ff0a6101010a60075560066101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x1948059de1def03c4ec35fc22c2bb8f2bf45dc33085514ff7f00000000000001", "0x04": "0x41f818a8e24eb6d7bb7b193b4f2b5fdcf4bd0d453f2ac3499d8830d391fa00ff", "0x05": "0xede6fe4a943dfb5d967a2b85d6728759d40d2ef0ae4bc28bbb1867f98c0600ff", "0x06": "0x083c936cbaad5de592badc2e142fe4ebd6103921f7aa6aff8100000000000001", "0x07": "0x57385019fe4e0939ca3f35c37cadfaf52fba5b1cdfb02def3866e8068bfa0101", "0x08": "0x810ac878bd98428f6be8c6426ba9f9da09e3e33bf4fe10bfa3f8b12c92060101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60066101000a6101000a600055600660ff0a6101000a60015560066101010a6101000a60025560066101000a60ff0a600355600660ff0a60ff0a60045560066101010a60ff0a60055560066101000a6101010a600655600660ff0a6101010a60075560066101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_7.json ================================================ { "expPowerOf256Of256_7": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_7Filler.json", "sourceHash": "5f0497543f5bbfea20d19f43c7129d149e737241704676e072b63afde805be9a" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60076101000a6101000a600055600760ff0a6101000a60015560076101010a6101000a60025560076101000a60ff0a600355600760ff0a60ff0a60045560076101010a60ff0a60055560076101000a6101010a600655600760ff0a6101010a60075560076101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2ebc", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60076101000a6101000a600055600760ff0a6101000a60015560076101010a6101000a60025560076101000a60ff0a600355600760ff0a60ff0a60045560076101010a60ff0a60055560076101000a6101010a600655600760ff0a6101010a60075560076101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x8bb02654111ad8c60ad8af132283a81f455c33085514ff7f0000000000000001", "0x04": "0xa8f75c129dbb8466d6703a2a0b8212131b3248d70e2478862ac40fe17485feff", "0x05": "0x5fd4d2de580383ee59f5e800ddb3f1717ceae03aede19d3dec5e5a69918700ff", "0x06": "0xc8624230b524b85d6340da48a5db20370fb921f7aa6aff810000000000000001", "0x07": "0x287b58a5a13cd7f454468ca616c181712f5ed25433a7d5a894b6ced35f87ff01", "0x08": "0x09930d11ac2804fa977bf951593c8dff8498779cc0cdc5812a4fba2f98870101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60076101000a6101000a600055600760ff0a6101000a60015560076101010a6101000a60025560076101000a60ff0a600355600760ff0a60ff0a60045560076101010a60ff0a60055560076101000a6101010a600655600760ff0a6101010a60075560076101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_8.json ================================================ { "expPowerOf256Of256_8": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_8Filler.json", "sourceHash": "15792a145929161f4b5174b8ac68de0118939c8190a930f37d644d5b713b6710" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x05f5e100", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60086101000a6101000a600055600860ff0a6101000a60015560086101010a6101000a60025560086101000a60ff0a600355600860ff0a60ff0a60045560086101010a60ff0a60055560086101000a6101010a600655600860ff0a6101010a60075560086101010a6101010a600855", "data": "0x", "gas": "0x989680", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9682a2", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60086101000a6101000a600055600860ff0a6101000a60015560086101010a6101000a60025560086101000a60ff0a600355600860ff0a60ff0a60045560086101010a60ff0a60055560086101000a6101010a600655600860ff0a6101010a60075560086101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x230041a0e7602d6e459609ed39081ec55c33085514ff7f000000000000000001", "0x04": "0xc407d8a413ef9079ead457ed686a05ac81039c0cae0a7f6afd01e8461ff800ff", "0x05": "0x67a397e0692385e4cd83853aabce220a94d449e885fa867e96d3ef5e180800ff", "0x06": "0x70add926e753655d6d0ebe9c0f81368fb921f7aa6aff81000000000000000001", "0x07": "0x0bdce80b8378e43f13d454b9d0a4c83cf311b8eaa45d5122cfd544a217f80101", "0x08": "0x629c25790e1488998877a9ecdf0fb69637e77d8a4bdc1b46270093ba20080101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60086101000a6101000a600055600860ff0a6101000a60015560086101010a6101000a60025560086101000a60ff0a600355600860ff0a60ff0a60045560086101010a60ff0a60055560086101000a6101010a600655600860ff0a6101010a60075560086101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256Of256_9.json ================================================ { "expPowerOf256Of256_9": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256Of256_9Filler.json", "sourceHash": "212ea9362b564faaa5a671ac3903679ec022f19adddf2ba1efa75226fdfde37e" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60096101000a6101000a600055600960ff0a6101000a60015560096101010a6101000a60025560096101000a60ff0a600355600960ff0a60ff0a60045560096101010a60ff0a60055560096101000a6101010a600655600960ff0a6101010a60075560096101010a6101010a600855", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0d2e08", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60096101000a6101000a600055600960ff0a6101000a60015560096101010a6101000a60025560096101000a60ff0a600355600960ff0a60ff0a60045560096101010a60ff0a60055560096101000a6101010a600655600960ff0a6101010a60075560096101010a6101010a600855", "nonce": "0x00", "storage": { "0x03": "0x53017d8eb210db2c8cd4a299079ec55c33085514ff7f00000000000000000001", "0x04": "0x48be09b6c6ae2aa660f1972125cecbb1038b5d236ecf766ba786e2c4e887feff", "0x05": "0x2e350d847ba73dc2099f83f532951c47269d9fd7e411b50bae00a9581f8900ff", "0x06": "0x013ab9e1f0df89a184b4d07080b68fb921f7aa6aff8100000000000000000001", "0x07": "0xf387ed41c1050f9da667f429a3e8fb30b61a55ede97d7b8acd797a03cd89ff01", "0x08": "0x525696c22bb3ce00fd2e3f6bbb9b4ea1046a5e31fcff2fedf8f8c74d28890101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60096101000a6101000a600055600960ff0a6101000a60015560096101010a6101000a60025560096101000a60ff0a600355600960ff0a60ff0a60045560096101010a60ff0a60055560096101000a6101010a600655600960ff0a6101010a60075560096101010a6101010a600855", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_1.json ================================================ { "expPowerOf256_1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_1Filler.json", "sourceHash": "0d7062f87c376d5496399d09973fd1d17d4e5812c3b44c5a16f35243e382fd64" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016101000a600055600160ff0a60015560016101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016101000a600055600160ff0a60015560016101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100", "0x01": "0xff", "0x02": "0x0101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016101000a600055600160ff0a60015560016101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_10.json ================================================ { "expPowerOf256_10": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_10Filler.json", "sourceHash": "04051dd7b9d82fc286b3295f20d29f42f9e92cd282e588295c728f27f781d635" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600a6101000a600055600a60ff0a600155600a6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600a6101000a600055600a60ff0a600155600a6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000", "0x01": "0xf62c88d104d1882cf601", "0x02": "0x010a2d78d2fcd2782d0a01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600a6101000a600055600a60ff0a600155600a6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_11.json ================================================ { "expPowerOf256_11": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_11Filler.json", "sourceHash": "539fa78d77db2b2b4e5dadf17841ea9ccce92cee9e965e405ae3da8343d38383" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600b6101000a600055600b60ff0a600155600b6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600b6101000a600055600b60ff0a600155600b6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000", "0x01": "0xf5365c4833ccb6a4c90aff", "0x02": "0x010b37a64bcfcf4aa5370b01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600b6101000a600055600b60ff0a600155600b6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_12.json ================================================ { "expPowerOf256_12": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_12Filler.json", "sourceHash": "c837269f587b7fa487d63c649517f0c82e0ab3fbc87cf3209ee63214adb247fc" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600c6101000a600055600c60ff0a600155600c6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600c6101000a600055600c60ff0a600155600c6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000", "0x01": "0xf44125ebeb98e9ee2441f401", "0x02": "0x010c42ddf21b9f19efdc420c01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600c6101000a600055600c60ff0a600155600c6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_13.json ================================================ { "expPowerOf256_13": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_13Filler.json", "sourceHash": "164362da0450215255015d0d05abaa8b78e77646f27966337a8a878f16da6f43" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600d6101000a600055600d60ff0a600155600d6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600d6101000a600055600d60ff0a600155600d6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000", "0x01": "0xf34ce4c5ffad5104361db20cff", "0x02": "0x010d4f20d00dbab909cc1e4e0d01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600d6101000a600055600d60ff0a600155600d6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_14.json ================================================ { "expPowerOf256_14": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_14Filler.json", "sourceHash": "bb07d85208662a3236b75df0e004bf54abb982bb14e8134b13e666279a39f6a1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600e6101000a600055600e60ff0a600155600e6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600e6101000a600055600e60ff0a600155600e6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000000000", "0x01": "0xf25997e139ada3b331e7945af201", "0x02": "0x010e5c6ff0ddc873c2d5ea6c5b0e01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600e6101000a600055600e60ff0a600155600e6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_15.json ================================================ { "expPowerOf256_15": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_15Filler.json", "sourceHash": "43d4318cd8989bb434be6f41f011dd397eb2b2c785070bedf9e4a333b279b5c7" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600f6101000a600055600f60ff0a600155600f6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600f6101000a600055600f60ff0a600155600f6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000000000", "0x01": "0xf1673e495873f60f7eb5acc6970eff", "0x02": "0x010f6acc60cea63c3698c056c7690f01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600f6101000a600055600f60ff0a600155600f6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_16.json ================================================ { "expPowerOf256_16": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_16Filler.json", "sourceHash": "66586a25e55376d52b4c15b22b116ffa26232b26978a9f16403d7e37560f8065" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60106101000a600055601060ff0a60015560106101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60106101000a600055601060ff0a60015560106101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000", "0x01": "0xf075d70b0f1b82196f36f719d077f001", "0x02": "0x01107a372d2f74e272cf59171e30781001" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60106101000a600055601060ff0a60015560106101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_17.json ================================================ { "expPowerOf256_17": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_17Filler.json", "sourceHash": "5340e7363062468ab959ac92d014d03bd8e172fc6764fc7d2fe0200d437662da" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60116101000a600055601160ff0a60015560116101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60116101000a600055601160ff0a60015560116101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000000000000000", "0x01": "0xef856134040c669755c7c022b6a77810ff", "0x02": "0x01118ab1645ca45755422870354ea8881101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60116101000a600055601160ff0a60015560116101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_18.json ================================================ { "expPowerOf256_18": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_18Filler.json", "sourceHash": "d2e13a0fdf747a1900296c97eb60b6ae888c47d96e776159454b321e2f0dc362" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60126101000a600055601260ff0a60015560126101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60126101000a600055601260ff0a60015560126101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000000000000000", "0x01": "0xee95dbd2d0085a30be71f86293f0d098ee01", "0x02": "0x01129c3c15c100fbac976a98a583f730991201" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60126101000a600055601260ff0a60015560126101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_19.json ================================================ { "expPowerOf256_19": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_19Filler.json", "sourceHash": "37d0b9634c1b1523efd2a59cbba3a9bebf63696e36f07c786266b1da5b767667" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60136101000a600055601360ff0a60015560136101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60136101000a600055601360ff0a60015560136101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000000000", "0x01": "0xeda745f6fd3851d68db3866a315cdfc85512ff", "0x02": "0x0113aed851d6c1fca84402033e297b27c9ab1301" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60136101000a600055601360ff0a60015560136101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_2.json ================================================ { "expPowerOf256_2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_2Filler.json", "sourceHash": "fc70a26e625c0d09ff09f1c38b004037cb6ac37d222ab8f7e5d63ffeecb548bf" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026101000a600055600260ff0a60015560026101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026101000a600055600260ff0a60015560026101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000", "0x01": "0xfe01", "0x02": "0x010201" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026101000a600055600260ff0a60015560026101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_20.json ================================================ { "expPowerOf256_20": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_20Filler.json", "sourceHash": "d895dace7075b6b234a3b6669055b84a074d38caf2c94740dd707ede5c4e52e6" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60146101000a600055601460ff0a60015560146101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60146101000a600055601460ff0a60015560146101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000000000000000000000", "0x01": "0xecb99eb1063b1984b725d2e3c72b82e88cbdec01", "0x02": "0x0114c2872a2898bea4ec46054167a4a2f174be1401" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60146101000a600055601460ff0a60015560146101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_21.json ================================================ { "expPowerOf256_21": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_21Filler.json", "sourceHash": "85a12df1a4f899dbb79e93cd5ecebe67fdd00f6a01ecf7d2beb506e50917de31" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60156101000a600055601560ff0a60015560156101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60156101000a600055601560ff0a60015560156101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000000000000000000000", "0x01": "0xebcce5125534de6b326ead10e3645765a4312e14ff", "0x02": "0x0115d749b152c1576391324b46a90c47946632d21501" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60156101000a600055601560ff0a60015560156101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_22.json ================================================ { "expPowerOf256_22": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_22Filler.json", "sourceHash": "d6c840b8fed448a5485f9902fbe548d3d0833253591b7523d2c8e7cee4b45d46" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60166101000a600055601660ff0a60015560166101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60166101000a600055601660ff0a60015560166101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000000000000000", "0x01": "0xeae1182d42dfa98cc73c3e63d280f30e3e8cfce6ea01", "0x02": "0x0116ed20fb041418baf4c37d91efb553dbfa9904e71601" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60166101000a600055601660ff0a60015560166101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_23.json ================================================ { "expPowerOf256_23": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_23Filler.json", "sourceHash": "70639158e9a2e7705e8e651519caa294422d4c22c4ae5f7aa4208c99934f8750" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60176101000a600055601760ff0a60015560176101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60176101000a600055601760ff0a60015560176101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000000000000000000000000000", "0x01": "0xe9f63715159cc9e33a7502256eae721b304e6fea0316ff", "0x02": "0x0118040e1bff182cd3afb8410f81a5092fd6939debfd1701" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60176101000a600055601760ff0a60015560176101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_24.json ================================================ { "expPowerOf256_24": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_24Filler.json", "sourceHash": "de159931cdc4d9e3b05bcd2450e0a3a68cefd8f7790f0e9b3e4bd20b00348372" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60186101000a600055601860ff0a60015560186101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60186101000a600055601860ff0a60015560186101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000000000000000000000000000", "0x01": "0xe90c40de00872d19573a8d23493fc3a9151e217a1913e801", "0x02": "0x01191c122a1b1745008367f9509126ae39066a3189e9141801" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60186101000a600055601860ff0a60015560186101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_25.json ================================================ { "expPowerOf256_25": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_25Filler.json", "sourceHash": "2be606687455e2c91c144dee314eb4a9b58d6d8fb20cdc3a2a5e249d343bff20" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60196101000a600055601960ff0a60015560196101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60196101000a600055601960ff0a60015560196101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000000000000000000000", "0x01": "0xe823349d2286a5ec3de3529625f683e56c0903589efad418ff", "0x02": "0x011a352e3c45325c4583eb6149e1b7d4e73f709bbb72fd2c1901" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60196101000a600055601960ff0a60015560196101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_26.json ================================================ { "expPowerOf256_26": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_26Filler.json", "sourceHash": "af71d938f6d58b1844196bd7efc232950357925dffae71ba917e3fae15fd590b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601a6101000a600055601a60ff0a600155601a6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601a6101000a600055601a60ff0a600155601a6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000000000000000000000000000000000", "0x01": "0xe73b116885641f4651a56f438fd08d61869cfa55465bd944e601", "0x02": "0x011b4f636a81778ea1c96f4cab2b998cbc26b00c572e7029451a01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601a6101000a600055601a60ff0a600155601a6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_27.json ================================================ { "expPowerOf256_27": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_27Filler.json", "sourceHash": "12b4fd8203f25dac8e6737c3bed9161e0a5750b398c2422c4e11ad654f0c3b36" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601b6101000a600055601b60ff0a600155601b6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601b6101000a600055601b60ff0a600155601b6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000000000000000000000000000000000", "0x01": "0xe653d6571cdebb270b53c9d44c40bcd425165d5af1157d6ba11aff", "0x02": "0x011c6ab2cdebf906306b38bbf7d6c52648e2d6bc63859e996e5f1b01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601b6101000a600055601b60ff0a600155601b6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_28.json ================================================ { "expPowerOf256_28": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_28Filler.json", "sourceHash": "e17b86493cb24537086cf9add344b6ae59bf3ae5940aeb9ad44eeb4a746823ef" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601c6101000a600055601c60ff0a600155601c6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601c6101000a600055601c60ff0a600155601c6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000000000000000000000000000", "0x01": "0xe56d8280c5c1dc6be448760a77f47c1750f146fd962467ee3579e401", "0x02": "0x011d871d80b9e4ff369ba3f4b3ce9beb6f2bb9931fe9243807cd7a1c01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601c6101000a600055601c60ff0a600155601c6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_29.json ================================================ { "expPowerOf256_29": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_29Filler.json", "sourceHash": "b90d51e859337fb3fcf2e09ca2206790304d7bbaf7c5752081dfa62ec20a00bb" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601d6101000a600055601d60ff0a600155601d6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601d6101000a600055601d60ff0a600155601d6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000000000000000000000000000000000000000000000", "0x01": "0xe48814fe44fc1a8f78642d946d7c879b39a055b6988e438647446a1cff", "0x02": "0x011ea4a49e3a9ee435d23f98a8826a875a9ae54cb3090d5c3fd547961d01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601d6101000a600055601d60ff0a600155601d6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_3.json ================================================ { "expPowerOf256_3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_3Filler.json", "sourceHash": "6214682fab04f2582976d90de343ca30bf46ab6f7793ef052c9c0cd244c29c6e" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036101000a600055600360ff0a60015560036101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036101000a600055600360ff0a60015560036101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000", "0x01": "0xfd02ff", "0x02": "0x01030301" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036101000a600055600360ff0a60015560036101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_30.json ================================================ { "expPowerOf256_30": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_30Filler.json", "sourceHash": "68b204da901a1c2f2cf81688626dad9204b912276b7e4432974a8c0e256715ac" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601e6101000a600055601e60ff0a600155601e6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601e6101000a600055601e60ff0a600155601e6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000000000000000000000000000000000000000000000", "0x01": "0xe3a38ce946b71e74e8ebc966d90f0b139e66b560e1f5b542c0fd25b2e201", "0x02": "0x011fc34942d8d9831a0811d8412aecf1e1f58031ffbc16699c151cddb31e01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601e6101000a600055601e60ff0a600155601e6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_31.json ================================================ { "expPowerOf256_31": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_31Filler.json", "sourceHash": "49e5149601ae2cfa0564b18d38bcc35b4fe703cac76882025a1b35a9cabef567" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601f6101000a600055601f60ff0a600155601f6101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601f6101000a600055601f60ff0a600155601f6101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000000000000000000000000000000000", "0x01": "0xe2bfe95c5d7067567402dd9d7235fc088ac84eab8113bf8d7e3c288d2f1eff", "0x02": "0x0120e30c8c1bb25c9d2219ea196c17ded3d775b231bbd28005b131fa90d11f01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601f6101000a600055601f60ff0a600155601f6101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_32.json ================================================ { "expPowerOf256_32": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_32Filler.json", "sourceHash": "974decf621c77d7ff79be3bc89ae8deecb63c5766ea8fd5a83b2dfd3b1f2058c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60206101000a600055602060ff0a60015560206101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0xd681", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60206101000a600055602060ff0a60015560206101010a600255", "nonce": "0x00", "storage": { "0x01": "0xe1dd29730112f6ef1d8edabfd4c3c60c823d865cd592abcdf0bdec64a1efe001", "0x02": "0x2203ef98a7ce0ef9bf3c04038583f6b2ab4d27e3ed8e5285b6e32c8b61f02001" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60206101000a600055602060ff0a60015560206101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_33.json ================================================ { "expPowerOf256_33": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_33Filler.json", "sourceHash": "2a7b68ea601c62fb6ae7603e4576332eb8e52655734329d0b56be10ce4d88d8f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60216101000a600055602160ff0a60015560216101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0xd681", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60216101000a600055602160ff0a60015560216101010a600255", "nonce": "0x00", "storage": { "0x01": "0xfb4c498e11e3f82e714be514ef024675bb48d678bd192222cd2e783d4df020ff", "0x02": "0x25f3884075dd08b8fb400789097aa95df8750bd17be0d83c9a0fb7ed52102101" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60216101000a600055602160ff0a60015560216101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_4.json ================================================ { "expPowerOf256_4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_4Filler.json", "sourceHash": "622075985c1d1107f37816ee8e9b24730902567916e00e2cc3b732f2dff0cbea" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60046101000a600055600460ff0a60015560046101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60046101000a600055600460ff0a60015560046101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000", "0x01": "0xfc05fc01", "0x02": "0x0104060401" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60046101000a600055600460ff0a60015560046101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_5.json ================================================ { "expPowerOf256_5": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_5Filler.json", "sourceHash": "0deb85f9420b006b9e7cad328b4f1df2a820afac55d7ab1e0be81a67b9f4bf0c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056101000a600055600560ff0a60015560056101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056101000a600055600560ff0a60015560056101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000", "0x01": "0xfb09f604ff", "0x02": "0x01050a0a0501" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056101000a600055600560ff0a60015560056101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_6.json ================================================ { "expPowerOf256_6": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_6Filler.json", "sourceHash": "fce500eb9c5fb197ee2d407f7a0e6f69ad4bb1905ce651982255241e9b5210fd" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60066101000a600055600660ff0a60015560066101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60066101000a600055600660ff0a60015560066101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000", "0x01": "0xfa0eec0efa01", "0x02": "0x01060f140f0601" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60066101000a600055600660ff0a60015560066101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_7.json ================================================ { "expPowerOf256_7": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_7Filler.json", "sourceHash": "9f25116f93a9ebcf664ae3b302dcbc55d0c42a32ae52f837bff7057bc0adda16" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60076101000a600055600760ff0a60015560076101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60076101000a600055600760ff0a60015560076101010a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000", "0x01": "0xf914dd22eb06ff", "0x02": "0x0107152323150701" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60076101000a600055600760ff0a60015560076101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_8.json ================================================ { "expPowerOf256_8": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_8Filler.json", "sourceHash": "6852bc5231c88e1d8dbd098c914b6e4496748429c62d9a3bac90c3a452bfbf12" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60086101000a600055600860ff0a60015560086101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60086101000a600055600860ff0a60015560086101010a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000", "0x01": "0xf81bc845c81bf801", "0x02": "0x01081c3846381c0801" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60086101000a600055600860ff0a60015560086101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf256_9.json ================================================ { "expPowerOf256_9": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf256_9Filler.json", "sourceHash": "9daf0e960cb9e7ab3c3aaf8c587201eca7d809394fca60b0c301231d891d75d5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60096101000a600055600960ff0a60015560096101010a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60096101000a600055600960ff0a60015560096101010a600255", "nonce": "0x00", "storage": { "0x00": "0x01000000000000000000", "0x01": "0xf723ac7d8253dc08ff", "0x02": "0x010924547e7e54240901" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60096101000a600055600960ff0a60015560096101010a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_128.json ================================================ { "expPowerOf2_128": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_128Filler.json", "sourceHash": "dac6d272b59f1cb03027b6e106b0b659a5ad6511e8cc121464dd73b220e512ff" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x608060020a600055607f60020a600155608160020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x608060020a600055607f60020a600155608160020a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000000000000000000000000000", "0x01": "0x80000000000000000000000000000000", "0x02": "0x0200000000000000000000000000000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x608060020a600055607f60020a600155608160020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_16.json ================================================ { "expPowerOf2_16": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_16Filler.json", "sourceHash": "298553d61666a9d9042726a205f483b392fcf206135ff0c709abab221cbf07cb" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x601060020a600055600f60020a600155601160020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601060020a600055600f60020a600155601160020a600255", "nonce": "0x00", "storage": { "0x00": "0x010000", "0x01": "0x8000", "0x02": "0x020000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x601060020a600055600f60020a600155601160020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_2.json ================================================ { "expPowerOf2_2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_2Filler.json", "sourceHash": "a82b4186babe26c83c518bf8bbd99cd104af2f47bb39300eb40556aad07b5e12" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600260020a600055600160020a600155600360020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600260020a600055600160020a600155600360020a600255", "nonce": "0x00", "storage": { "0x00": "0x04", "0x01": "0x02", "0x02": "0x08" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600260020a600055600160020a600155600360020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_256.json ================================================ { "expPowerOf2_256": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_256Filler.json", "sourceHash": "c188d36960623fbc68bd0024325dfd28df3964c6ef43d2e5322500c780389b05" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x61010060020a60005560ff60020a60015561010160020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x011105", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x61010060020a60005560ff60020a60015561010160020a600255", "nonce": "0x00", "storage": { "0x01": "0x8000000000000000000000000000000000000000000000000000000000000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x61010060020a60005560ff60020a60015561010160020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_32.json ================================================ { "expPowerOf2_32": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_32Filler.json", "sourceHash": "c6609e6780ee6df802de62d1dea9be23d63c4e9dcf9cccb789aea189af24ca4b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x602060020a600055601f60020a600155602160020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x602060020a600055601f60020a600155602160020a600255", "nonce": "0x00", "storage": { "0x00": "0x0100000000", "0x01": "0x80000000", "0x02": "0x0200000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x602060020a600055601f60020a600155602160020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_4.json ================================================ { "expPowerOf2_4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_4Filler.json", "sourceHash": "824b5c5eb508090e972079c0ec4df08cb8a47ffaa01c430e27bd87d5fe5ff231" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600460020a600055600360020a600155600560020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600460020a600055600360020a600155600560020a600255", "nonce": "0x00", "storage": { "0x00": "0x10", "0x01": "0x08", "0x02": "0x20" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600460020a600055600360020a600155600560020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_64.json ================================================ { "expPowerOf2_64": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_64Filler.json", "sourceHash": "54e3387f099e871b185cfc2774993f7c7a0e84043861114322ec501197877b00" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x604060020a600055603f60020a600155604160020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x604060020a600055603f60020a600155604160020a600255", "nonce": "0x00", "storage": { "0x00": "0x010000000000000000", "0x01": "0x8000000000000000", "0x02": "0x020000000000000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x604060020a600055603f60020a600155604160020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expPowerOf2_8.json ================================================ { "expPowerOf2_8": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expPowerOf2_8Filler.json", "sourceHash": "7fe7ad308e3f9e180ceaa707ef7c0704b9824db69d5583b389118c7d008259a0" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600860020a600055600760020a600155600960020a600255", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9be9", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600860020a600055600760020a600155600960020a600255", "nonce": "0x00", "storage": { "0x00": "0x0100", "0x01": "0x80", "0x02": "0x0200" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600860020a600055600760020a600155600960020a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expXY.json ================================================ { "expXY": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expXYFiller.json", "sourceHash": "aa54a8124b5ab846684618ae6ca2a2b00b6b6f89ea8a92916d4c344252bc73b9" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000356000556020356001556001546000540a600255", "data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000100000000000f", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0xd609", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000356000556020356001556001546000540a600255", "nonce": "0x00", "storage": { "0x00": "0x02", "0x01": "0x0100000000000f" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000356000556020356001556001546000540a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/expXY_success.json ================================================ { "expXY_success": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/expXY_successFiller.json", "sourceHash": "2591b4069ce479a824e6de352cc0feb650dd6e68e6b5d91a6ceae7ac47a182fd" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000356000556020356001556001546000540a600255", "data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x9bad", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000356000556020356001556001546000540a600255", "nonce": "0x00", "storage": { "0x00": "0x02", "0x01": "0x0f", "0x02": "0x8000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000356000556020356001556001546000540a600255", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/fibbonacci_unrolled.json ================================================ { "fibbonacci_unrolled": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/fibbonacci_unrolledFiller.json", "sourceHash": "f2efe4855621477d368126f2eb61a6c0e0a859482ba9ca35ae946c183095e687" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001600181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810160005260206000f3", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f4192", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x0000000000000000000000000000000000000000000000000000000000001055", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810160005260206000f3", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810181810160005260206000f3", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mod0.json ================================================ { "mod0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mod0Filler.json", "sourceHash": "3e7d577aa0433a1c8bb59b19b139d2f195f93802b29f1cfa25586a5be27d5a55" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600206600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600206600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600206600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mod1.json ================================================ { "mod1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mod1Filler.json", "sourceHash": "400ab04d809c783c91ed79620d859ad3cde7557f4e16b629d883118692b010db" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mod2.json ================================================ { "mod2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mod2Filler.json", "sourceHash": "a0a44f5d470eb9b698cbb6e47079ddf9869089a7d53d72c2ee4742bb605c45b5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mod3.json ================================================ { "mod3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mod3Filler.json", "sourceHash": "7488d5657da87f809a873eac653c93daab9bc57e606cd57c2a71071ba2ea2e3d" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000600306600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600306600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600306600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mod4.json ================================================ { "mod4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mod4Filler.json", "sourceHash": "7d48b4616d7370ab85fa3014c889388eb07a0e6e111c8bc66ffdb5075245af30" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600260000306600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600260000306600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600260000306600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/modByZero.json ================================================ { "modByZero": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/modByZeroFiller.json", "sourceHash": "1ee861fa9935cce6f76e61719dd69f769ce07555784e64132bb11c83dc4ac82d" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001600060030603600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600060030603600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600060030603600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul0.json ================================================ { "mul0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul0Filler.json", "sourceHash": "f10c71e7abc8fcf1c8275d4fab7995b1a099623699bec6b431b9b683adb13d19" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600202600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600202600055", "nonce": "0x00", "storage": { "0x00": "0x06" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600202600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul1.json ================================================ { "mul1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul1Filler.json", "sourceHash": "18ac7009fa72c2a295b18398053e4a38b7513dcc78cf21dda7165277645b8a31" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul2.json ================================================ { "mul2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul2Filler.json", "sourceHash": "15d55a50802f3114002e61e7cc3ccf67965130efc05f401666744665bb0fd7e5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6017600002600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6017600002600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6017600002600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul3.json ================================================ { "mul3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul3Filler.json", "sourceHash": "833d319fb029a718db5a29c1f80b163aea968523c768b47346331102fc245d9a" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001601702600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001601702600055", "nonce": "0x00", "storage": { "0x00": "0x17" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001601702600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul4.json ================================================ { "mul4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul4Filler.json", "sourceHash": "f2153621a98b81499e3d6692ee5ecb70305619ea9d216e33bfd4f30386c888cc" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055", "nonce": "0x00", "storage": { "0x00": "0x8000000000000000000000000000000000000000000000000000000000000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul5.json ================================================ { "mul5": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul5Filler.json", "sourceHash": "d3beb055e4e2cd779d8e0a9809c8d64f0afd3f2c5709e96781120b46c7c79f63" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01730a", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul6.json ================================================ { "mul6": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul6Filler.json", "sourceHash": "11d29defa64cdfbb8a43175b0e372cd909c8117d038214db7e55287fe8b8e4e1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013872", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mul7.json ================================================ { "mul7": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mul7Filler.json", "sourceHash": "19d2f9f0f01f9720e26192d56e917a98349ebca4838b88b445f0bc192d31fb37" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7001234567890abcdef0fedcba09876543217001234567890abcdef0fedcba09876543217001234567890abcdef0fedcba0987654321020260005260206000f3", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01867e", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x47d0817e4167b1eb4f9fc722b133ef9d7d9a6fb4c2c1c442d000107a5e419561", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7001234567890abcdef0fedcba09876543217001234567890abcdef0fedcba09876543217001234567890abcdef0fedcba0987654321020260005260206000f3", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7001234567890abcdef0fedcba09876543217001234567890abcdef0fedcba09876543217001234567890abcdef0fedcba0987654321020260005260206000f3", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod0.json ================================================ { "mulmod0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod0Filler.json", "sourceHash": "7a85365937f4a347082dcccf17277f2fabe096434e1463d033eca053177c26de" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026002600109600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026002600109600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026002600109600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod1.json ================================================ { "mulmod1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod1Filler.json", "sourceHash": "6db56ceb11f53bd80b8f3531720133c250640c35c9ba822aba0d5ea2fb9c0bc6" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036002600003600160000309600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172f8", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036002600003600160000309600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036002600003600160000309600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod1_overflow.json ================================================ { "mulmod1_overflow": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod1_overflowFiller.json", "sourceHash": "4c2a84a6695eac961ca4d3d9f493bd2b1f7294a9d182b3d6473156d242ce370f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60056002600160000309600055", "data": "0x", "gas": "0x2710", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x136e", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056002600160000309600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60056002600160000309600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod1_overflow2.json ================================================ { "mulmod1_overflow2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod1_overflow2Filler.json", "sourceHash": "17f238c5929305eeddf4df7e289bd41936bceafeccda7c1f3ad63df457cef8a4" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600560027f800000000000000000000000000000000000000000000000000000000000000009600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef40c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560027f800000000000000000000000000000000000000000000000000000000000000009600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560027f800000000000000000000000000000000000000000000000000000000000000009600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod1_overflow3.json ================================================ { "mulmod1_overflow3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod1_overflow3Filler.json", "sourceHash": "07059fc8bbd6426ca73d3dbf7c27ee13cdfc6b7f011a4567fdf4c24db26a9289" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600560027f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef40c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560027f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09600055", "nonce": "0x00", "storage": { "0x00": "0x04" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560027f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod1_overflow4.json ================================================ { "mulmod1_overflow4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod1_overflow4Filler.json", "sourceHash": "33cef2a558f1598c9506702942344efc563fb91d7afb8888c00313911aac3681" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600560027f800000000000000000000000000000000000000000000000000000000000000109600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef40c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560027f800000000000000000000000000000000000000000000000000000000000000109600055", "nonce": "0x00", "storage": { "0x00": "0x03" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560027f800000000000000000000000000000000000000000000000000000000000000109600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod2.json ================================================ { "mulmod2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod2Filler.json", "sourceHash": "775f75c0de180ff2d75ebace50e0de592f0c2d6fe37834d7ddee534a11a74b95" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036001600560000309600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600560000309600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600560000309600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod2_0.json ================================================ { "mulmod2_0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod2_0Filler.json", "sourceHash": "e0b5b4c3d337750afce688fd1052033093d205564d51c9b7ffd5d229431b87db" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036001600560000309600360056000030714600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172ea", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600560000309600360056000030714600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600560000309600360056000030714600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod2_1.json ================================================ { "mulmod2_1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod2_1Filler.json", "sourceHash": "06ca473c76f3d122323af9b62efe6fdc9cc0908e176db279806be103db96dbf2" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036001600560000309600360056000030614600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013852", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600560000309600360056000030614600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036001600560000309600360056000030614600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod3.json ================================================ { "mulmod3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod3Filler.json", "sourceHash": "7cc844062b25211aa679f8cd221741f0ee4128d6a52d7d19d571e5916541f0a8" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60036000036001600509600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036000036001600509600055", "nonce": "0x00", "storage": { "0x00": "0x05" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60036000036001600509600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod3_0.json ================================================ { "mulmod3_0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod3_0Filler.json", "sourceHash": "b3d3a4cdf02aa5cb2b41d91cea4a94ef1c69b7b17c27d18fa16f3555dab41f24" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60026003600003600160050914600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172f8", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026003600003600160050914600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60026003600003600160050914600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmod4.json ================================================ { "mulmod4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmod4Filler.json", "sourceHash": "6182e58d7e616d18db75f5a0fa4577abf1c00b1d76a62f9d86b8f2a72e133d44" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6064601b60250960005360006001f3", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x018680", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6064601b60250960005360006001f3", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6064601b60250960005360006001f3", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmoddivByZero.json ================================================ { "mulmoddivByZero": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmoddivByZeroFiller.json", "sourceHash": "8a022cd49b9135b3a23925324bda3d394dd7a930e80699d054897bb40dbd7a9b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006001600509600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600509600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600509600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmoddivByZero1.json ================================================ { "mulmoddivByZero1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmoddivByZero1Filler.json", "sourceHash": "cbcd5284164a3ec86b605bc3a42efb84f54710e7407b4b78d79a492d09ae8a7f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006001600009600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600009600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006001600009600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmoddivByZero2.json ================================================ { "mulmoddivByZero2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmoddivByZero2Filler.json", "sourceHash": "7f8bc67d37e359d6313f6e86a6569da126d12329f8bb93945b6902a9f03f51b5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006000600109600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006000600109600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006000600109600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/mulmoddivByZero3.json ================================================ { "mulmoddivByZero3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/mulmoddivByZero3Filler.json", "sourceHash": "7688b4d65f8ec53bf9153958e4e1513cff10bf7aeef85358c5460c93650c5b7e" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60006000600009600103600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006000600009600103600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60006000600009600103600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/not1.json ================================================ { "not1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/not1Filler.json", "sourceHash": "1f61a917c75f86536e6a6d2244ef9fff5af15ae315eeca357fc50515d7998cc9" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6201e2406000526000511960005260206000f3", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f421f", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1dbf", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6201e2406000526000511960005260206000f3", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6201e2406000526000511960005260206000f3", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv0.json ================================================ { "sdiv0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv0Filler.json", "sourceHash": "2c0d876988f16b3044bf06c02656608dd4bff9d1c543b5bf4bdbc719077b6df4" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv1.json ================================================ { "sdiv1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv1Filler.json", "sourceHash": "4cb3f0d95c2be66db60cf7feb607cbe4e8626f770d5819b1687cea47f1d7ae51" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv2.json ================================================ { "sdiv2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv2Filler.json", "sourceHash": "ae07c37c5d2bb2af34d6fdf03af2b989192e0b33c10537da65e85c957a007312" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6004600003600260000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172fe", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6004600003600260000305600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6004600003600260000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv3.json ================================================ { "sdiv3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv3Filler.json", "sourceHash": "8ee2402bfe21dabf91e921a32251808f8ad9f3a9739132155e283cfe4f0a0747" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6002600003600405600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6002600003600405600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6002600003600405600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv4.json ================================================ { "sdiv4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv4Filler.json", "sourceHash": "271280077cf5bee771ebcccae268a86ac603c990debe40a7f3b0f32324def426" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6004600003600505600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6004600003600505600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6004600003600505600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv5.json ================================================ { "sdiv5": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv5Filler.json", "sourceHash": "36db7de83011fb20807d30a5be5dfd0ab8b48c4f5cbb426d81e5189cc04d0694" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000305600055", "nonce": "0x00", "storage": { "0x00": "0x8000000000000000000000000000000000000000000000000000000000000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv6.json ================================================ { "sdiv6": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv6Filler.json", "sourceHash": "a045b5379d9af7d8304b71f8c67876fcbf1710892858cec78a6bffb30d4e21e1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60007f800000000000000000000000000000000000000000000000000000000000000060000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007f800000000000000000000000000000000000000000000000000000000000000060000305600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007f800000000000000000000000000000000000000000000000000000000000000060000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv7.json ================================================ { "sdiv7": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv7Filler.json", "sourceHash": "f4fe8c32af100ae3c2c8084e2b00306df9e38cf9313873ad810ecfa0461b7481" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6019600160000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6019600160000305600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6019600160000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv8.json ================================================ { "sdiv8": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv8Filler.json", "sourceHash": "78a291be48ce1144fbc0a8579c1a081a60f8b60b3ac5d6fedcc6293e18815caa" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001600003600160000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600003600160000305600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600003600160000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv9.json ================================================ { "sdiv9": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv9Filler.json", "sourceHash": "7a561f7a1e2f67ee73d4a80da566df5cffb62750cf3ba78b3ed05d4060c719c0" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001600160000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600160000305600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001600160000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdivByZero0.json ================================================ { "sdivByZero0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdivByZero0Filler.json", "sourceHash": "96ed2f4a00af3d35ce604e7c80653ab3bd82068c016d055b05a5ac974b617c75" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000600003600360000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172fe", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600003600360000305600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600003600360000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdivByZero1.json ================================================ { "sdivByZero1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdivByZero1Filler.json", "sourceHash": "b1da3a2bbeee8a06d2aed771b57930c7942ada63fc583943364cdc4f5944ba5a" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdivByZero2.json ================================================ { "sdivByZero2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdivByZero2Filler.json", "sourceHash": "1c8def1dce7b0cbede238934556897534a1307ed30815446ef651b5f42526a01" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600160007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf923bdff6000030501600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600160007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf923bdff6000030501600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600160007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf923bdff6000030501600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv_dejavu.json ================================================ { "sdiv_dejavu": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv_dejavuFiller.json", "sourceHash": "a18742fdc18faf55d5d8473bdd7353855f15cbf0e5777fd844b887c56089c3c2" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600560096000030580600055", "data": "0x", "gas": "0x989680", "gasPrice": "0x01", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x984849", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560096000030580600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600560096000030580600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv_i256min.json ================================================ { "sdiv_i256min": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv_i256minFiller.json", "sourceHash": "7b034b640478e576766cf07ec531a2e797b450e51e5e28ad8e44671b735a3c2d" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016000037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "nonce": "0x00", "storage": { "0x00": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv_i256min2.json ================================================ { "sdiv_i256min2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv_i256min2Filler.json", "sourceHash": "aea84dd4611287455f1e3edacab6c6f97dcbc2514fe8c5c03634934d7f675822" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000305600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000305600055", "nonce": "0x00", "storage": { "0x00": "0x8000000000000000000000000000000000000000000000000000000000000000" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000305600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sdiv_i256min3.json ================================================ { "sdiv_i256min3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sdiv_i256min3Filler.json", "sourceHash": "e3bddf0c7cb0c1ac947275072cc39085532b34dbe34213f5a69a6a45c4f89f3e" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x01", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f2ea4", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextendInvalidByteNumber.json ================================================ { "signextendInvalidByteNumber": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextendInvalidByteNumberFiller.json", "sourceHash": "ae2ebe3461944c83320578ae60e2d5b58ac8c905a085f8208174c2c4a43582f1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x62126af460500b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62126af460500b600055", "nonce": "0x00", "storage": { "0x00": "0x126af4" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62126af460500b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_00.json ================================================ { "signextend_00": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_00Filler.json", "sourceHash": "14c63e4a6badf000b6f489b33cbeebd1337d18f7118ae64c091cba0f2c71865c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600060000b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f2eaa", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600060000b600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600060000b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_0_BigByte.json ================================================ { "signextend_0_BigByte": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_0_BigByteFiller.json", "sourceHash": "51826d588208ff7923d16a2d7237a034e5549d9b576c4f676fe1a70c02cf8fa1" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_AlmostBiggestByte.json ================================================ { "signextend_AlmostBiggestByte": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_AlmostBiggestByteFiller.json", "sourceHash": "6b18abf5b443f69a5db8c96342dd485f1a667a69b8dbabf0a562c25dad996b76" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_BigByteBigByte.json ================================================ { "signextend_BigByteBigByte": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_BigByteBigByteFiller.json", "sourceHash": "8e48087be94e847f3d64c7ac1b8ac041d85d63bae9aa6144ef668d5749f50d1a" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_BigBytePlus1_2.json ================================================ { "signextend_BigBytePlus1_2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_BigBytePlus1_2Filler.json", "sourceHash": "0c4455484bad24f9a15f343c3082f14a6b13c61c67ffc2b79b00ba7edccfbf55" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60ff68f000000000000000010b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60ff68f000000000000000010b600055", "nonce": "0x00", "storage": { "0x00": "0xff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60ff68f000000000000000010b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_BigByte_0.json ================================================ { "signextend_BigByte_0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_BigByte_0Filler.json", "sourceHash": "3f541ab10aecc9a1f44cde8811de0aaae5a39b202a82ee3e11488a4320eb4af5" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f2eaa", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_BitIsNotSet.json ================================================ { "signextend_BitIsNotSet": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_BitIsNotSetFiller.json", "sourceHash": "c9d69758b60dd1e44dd8eeabf7df4c0cc7a7276decdd717842036afcf5116b97" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x62122f6a60000b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62122f6a60000b600055", "nonce": "0x00", "storage": { "0x00": "0x6a" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62122f6a60000b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_BitIsNotSetInHigherByte.json ================================================ { "signextend_BitIsNotSetInHigherByte": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_BitIsNotSetInHigherByteFiller.json", "sourceHash": "82d0345b35ff950ddc99d62e74ec1dd1ad97cfad97fea03ef678758d68af7f9f" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x62126af460010b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62126af460010b600055", "nonce": "0x00", "storage": { "0x00": "0x6af4" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62126af460010b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_BitIsSetInHigherByte.json ================================================ { "signextend_BitIsSetInHigherByte": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_BitIsSetInHigherByteFiller.json", "sourceHash": "b5dc9bb4906717453c5d4140f135bfe98b0fe8695e970ef24a29ab71df0bda1c" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6212faf460010b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6212faf460010b600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf4" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6212faf460010b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_Overflow_dj42.json ================================================ { "signextend_Overflow_dj42": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_Overflow_dj42Filler.json", "sourceHash": "f7bdd84657605dd676ce51acf2d3eefc1fd0ccbec5221713a047cb40d1a65b35" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6005565b005b61800080680100000000000000010b6180011160035763badf000d601155", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0f4212", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6005565b005b61800080680100000000000000010b6180011160035763badf000d601155", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6005565b005b61800080680100000000000000010b6180011160035763badf000d601155", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_bigBytePlus1.json ================================================ { "signextend_bigBytePlus1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_bigBytePlus1Filler.json", "sourceHash": "d0db106dfe0e5b3805ac0dd9944caba9033cc9d42300277db9178888de3da5ab" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x66f000000000000161ffff0b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x66f000000000000161ffff0b600055", "nonce": "0x00", "storage": { "0x00": "0xf0000000000001" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x66f000000000000161ffff0b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/signextend_bitIsSet.json ================================================ { "signextend_bitIsSet": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/signextend_bitIsSetFiller.json", "sourceHash": "14f83c5f56b0fcc7c2b5483ab05230a989cd554a607dd7b84cb099a89cc897af" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x989680", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x62122ff460000b600055", "data": "0x", "gas": "0x0f4240", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0ef412", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62122ff460000b600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x62122ff460000b600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod0.json ================================================ { "smod0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod0Filler.json", "sourceHash": "5090832871af25c7ceaf944f409eb0e94d1800eebd6b87e0cac8315067184fcb" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600003600560000307600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600003600560000307600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600003600560000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod1.json ================================================ { "smod1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod1Filler.json", "sourceHash": "a57ed4a85de8b2939c039da5fee98f4fc354fa223ae092f3e495105ddce5c56b" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600003600507600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600003600507600055", "nonce": "0x00", "storage": { "0x00": "0x02" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600003600507600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod2.json ================================================ { "smod2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod2Filler.json", "sourceHash": "d5a496413d292ae0096943667462f92b52d3010e36ea0c846d723390e83658d3" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600560000307600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600560000307600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600560000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod3.json ================================================ { "smod3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod3Filler.json", "sourceHash": "e4d49fb43415af8b0bf060644c44d62006e9b6ed9b6e8fd0c7b45f037f013796" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod4.json ================================================ { "smod4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod4Filler.json", "sourceHash": "7908421af47faaa7b9522476f8d51d570900688619861b975ab02f6cefc0d1e3" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6000600260000307600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x017304", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600260000307600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6000600260000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod5.json ================================================ { "smod5": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod5Filler.json", "sourceHash": "07eb8321e49b92d57ae65e0a70e469a242c14ecdcff8e825edf6708a46377cd2" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "data": "0x", "gas": "0x2710", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x1374", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod6.json ================================================ { "smod6": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod6Filler.json", "sourceHash": "fe56c5ac0debfe243c96c9d5aa90ac5c720a92ac095dbd6223568d209db8df07" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x01386c", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod7.json ================================================ { "smod7": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod7Filler.json", "sourceHash": "06d6c999f902ae33810fa7c57315c91e2224dbf6bccb27fc3ab67da27ab1d259" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "data": "0x", "gas": "0x2710", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x1374", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod8_byZero.json ================================================ { "smod8_byZero": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod8_byZeroFiller.json", "sourceHash": "b2d99792bf12eee7d74ed10f87a20da79d761bebcdbfd850dac15bfc7af03548" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600d600060c86000030703600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013866", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600d600060c86000030703600055", "nonce": "0x00", "storage": { "0x00": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600d600060c86000030703600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod_i256min1.json ================================================ { "smod_i256min1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod_i256min1Filler.json", "sourceHash": "49dc44af825b3bf752ffe7c8794b3bc7bcebc76e23d7a5346f499da42e4f8223" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000307600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0172fe", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000307600055", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000307600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/smod_i256min2.json ================================================ { "smod_i256min2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/smod_i256min2Filler.json", "sourceHash": "cc7209a5759f3315b98364bcb6ef30bebb16b685ed36afadcbab35a1200acdb2" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x600160016000037f80000000000000000000000000000000000000000000000000000000000000006000030703600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013860", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600160016000037f80000000000000000000000000000000000000000000000000000000000000006000030703600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x600160016000037f80000000000000000000000000000000000000000000000000000000000000006000030703600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/stop.json ================================================ { "stop": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/stopFiller.json", "sourceHash": "bc6050bff0814e1c855ff9aef2c44c284d23f536bf88ecbc3186f9aa66c946bb" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x00", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x0186a0", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x00", "nonce": "0x00", "storage": {} } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x00", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sub0.json ================================================ { "sub0": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sub0Filler.json", "sourceHash": "80d4bc7245d1e0ae45c6556aaa6efcd2fc50635477aeb551119ddcc76c895177" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6001601703600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001601703600055", "nonce": "0x00", "storage": { "0x00": "0x16" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6001601703600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sub1.json ================================================ { "sub1": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sub1Filler.json", "sourceHash": "63ac31d5c57f74ac93f4586ea3043afcec3ebacbe9cae42f38bc2eadb43a42ad" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6003600203600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600203600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6003600203600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sub2.json ================================================ { "sub2": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sub2Filler.json", "sourceHash": "9b0965f57e67ef44cdb6e1429c539328c9ad65ce3327e3f8734a885c0bfd7b59" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x6017600003600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6017600003600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x6017600003600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sub3.json ================================================ { "sub3": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sub3Filler.json", "sourceHash": "8fb91e839aacf910ef69140a7b0580422298414d336741213d858b8fc351c080" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055", "nonce": "0x00", "storage": { "0x00": "0x01" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmArithmeticTest/sub4.json ================================================ { "sub4": { "_info": { "comment": "", "filledwith": "testeth 1.4.0.dev0-56+commit.71414ae3", "lllcversion": "Version: 0.4.25-develop.2018.5.30+commit.0a1a8bfb.Linux.g++", "source": "src/VMTestsFiller/vmArithmeticTest/sub4Filler.json", "sourceHash": "417b791bbf2fa854dee2bc03e91e41257df0dd49affcf219824265c2d100d4c9" }, "callcreates": [], "env": { "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty": "0x0100", "currentGasLimit": "0x0f4240", "currentNumber": "0x00", "currentTimestamp": "0x01" }, "exec": { "address": "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055", "data": "0x", "gas": "0x0186a0", "gasPrice": "0x5af3107a4000", "origin": "0xcd1722f2947def4cf144679da39c4c32bdc35681", "value": "0x0de0b6b3a7640000" }, "gas": "0x013874", "logs": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out": "0x", "post": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055", "nonce": "0x00", "storage": { "0x00": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre": { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6": { "balance": "0x0de0b6b3a7640000", "code": "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055", "nonce": "0x00", "storage": {} } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/and0.json ================================================ { "and0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/and0Filler.json", "sourceHash" : "751e5c75a0cb1826f0a0d355bdf3f27982c52bd4b7b28cfbac953528fe2c6b8a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600216600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600216600055", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600216600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/and1.json ================================================ { "and1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/and1Filler.json", "sourceHash" : "cc1f598dde43f243ed3b79d6876def08bd96e0f532b29dceb744f696867d9148" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600216600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600216600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600216600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/and2.json ================================================ { "and2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/and2Filler.json", "sourceHash" : "c406f9725926f6cc70844468f19b89588e6762067a031cc07b99348ac267e742" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600316600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600316600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600316600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/and3.json ================================================ { "and3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/and3Filler.json", "sourceHash" : "2e7027e2c4da993dee53d9c1549115c977112ba350b4371946ab2d06ad450e63" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600055", "nonce" : "0x00", "storage" : { "0x00" : "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/and4.json ================================================ { "and4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/and4Filler.json", "sourceHash" : "aae5ac146ebfbba6d13ad1b8194d91eb8dea6d4769c45a38576a443ad94ab2cd" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055", "nonce" : "0x00", "storage" : { "0x00" : "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/and5.json ================================================ { "and5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/and5Filler.json", "sourceHash" : "76a55675eeeb3cbe72d56adb48b158ceb4ce445420788df61486a7c63e09cd6b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055", "nonce" : "0x00", "storage" : { "0x00" : "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte0.json ================================================ { "byte0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte0Filler.json", "sourceHash" : "6764ebba17fa4d9be8f1abfb1d2fd0fe50528a43081a79a1f4fdeb8168fdb465" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016000601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016000601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016000601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte1.json ================================================ { "byte1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte1Filler.json", "sourceHash" : "622c7aedaefd48e66eff987415f47ab610b595b1f85c5dfafb09616e0bbdfd75" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016001601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016001601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016001601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte10.json ================================================ { "byte10" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte10Filler.json", "sourceHash" : "1c00cff0fd72755c87f59585d40a1edf5d63b1386f3ddbc23fd95b03e8f9c9f7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte11.json ================================================ { "byte11" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte11Filler.json", "sourceHash" : "e649fc5b9e0fbbc092ea449680e3055126543b929ba7147b9c967ee35e695a2e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x67804020100804020160001a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x67804020100804020160001a600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x67804020100804020160001a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte2.json ================================================ { "byte2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte2Filler.json", "sourceHash" : "0367f73e6a3a5257c7c35f7ebdddb42888be0f0d7534b2687e20c286df02c90e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016002601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016002601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016002601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte3.json ================================================ { "byte3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte3Filler.json", "sourceHash" : "5b001879a3cdd7c7e4a1cc6ef0e0101db4931274676fa2083c52b7bbb95403de" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016003601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016003601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x08" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016003601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte4.json ================================================ { "byte4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte4Filler.json", "sourceHash" : "d79870f477b475d6f878076b20631d89ce8831da937252cf6657d935f0ad3482" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016004601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016004601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x10" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016004601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte5.json ================================================ { "byte5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte5Filler.json", "sourceHash" : "9242b77cc4a07275c886c83d252350713ac84a914cc7b5069f7fdd21e887b6c0" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016005601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016005601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x20" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016005601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte6.json ================================================ { "byte6" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte6Filler.json", "sourceHash" : "702f95bfde16820fa666d510e6c48af4b06c824d6464d5ba344fe76696b8e526" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016006601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016006601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x40" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016006601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte7.json ================================================ { "byte7" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte7Filler.json", "sourceHash" : "5f8261cfc1a852245ad1606af64a6e1cca7ad5d0082eef8d32c68ae6d92eb2ba" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016007601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016007601f031a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x80" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016007601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte8.json ================================================ { "byte8" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte8Filler.json", "sourceHash" : "505fcf8b5851e3c9689ab5e1ef238abf45379045f0c21ac44ee6e1a8e51c9f9a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x678040201008040201601f601f031a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017306", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x678040201008040201601f601f031a600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x678040201008040201601f601f031a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/byte9.json ================================================ { "byte9" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/byte9Filler.json", "sourceHash" : "b4c4eb8a9dd91e27de3645370f434e4f617deb1f5c425286374537552e3ab7f3" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6780402010080402016020601f051a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017304", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016020601f051a600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6780402010080402016020601f051a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/eq0.json ================================================ { "eq0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/eq0Filler.json", "sourceHash" : "19b881bd7fb221954f30f51297eb529bb212bc9c8cf0d69c7f98f9f51985817e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6003600003600560000314600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017300", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6003600003600560000314600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6003600003600560000314600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/eq1.json ================================================ { "eq1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/eq1Filler.json", "sourceHash" : "fc840a1a4938e2e95f1554bf8457ce0b0309bab97b81a41b4c8a8c6c92e22814" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000600014600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600014600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600014600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/eq2.json ================================================ { "eq2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/eq2Filler.json", "sourceHash" : "8240a3a93dc6c7720f3eb4b9d4657c8f13275f68c13ed4150d9725dada431480" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/gt0.json ================================================ { "gt0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/gt0Filler.json", "sourceHash" : "dd0a3d85d6ff2212eeb3200d247a57bfb1cc778850904069b4473d005f044a80" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000600260000311600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600260000311600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600260000311600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/gt1.json ================================================ { "gt1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/gt1Filler.json", "sourceHash" : "2d0cc48b6bacc0f8676ad35ef31ccec94c6d9e6485715c894bcc09f145c513cc" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600003600011600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017306", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600003600011600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600003600011600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/gt2.json ================================================ { "gt2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/gt2Filler.json", "sourceHash" : "5353ce8dad79cfc681d5df6bc90931ea174bf2c0692aa6bd4ac3dfc4b15105cf" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/gt3.json ================================================ { "gt3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/gt3Filler.json", "sourceHash" : "a2135f3cc275562615d53ef7e0b42284789cf52871f599c9ba581fcf90157914" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600011600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600011600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600011600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/iszeo2.json ================================================ { "iszeo2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/iszeo2Filler.json", "sourceHash" : "abf5b709846b428ec72f7011c84753cef326b6a91ff947a5b803bf2908c335e8" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600260000315600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017309", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600260000315600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600260000315600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/iszero0.json ================================================ { "iszero0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/iszero0Filler.json", "sourceHash" : "0535ce2a70ccc8c78f99dd11be51043663ad7bf946daa2e24bd5c76ee1df769e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/iszero1.json ================================================ { "iszero1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/iszero1Filler.json", "sourceHash" : "3c42208e8bba63c702a33e754f3401999219454a52e165d33e56ccb406b0b2dc" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600015600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013877", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600015600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600015600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/lt0.json ================================================ { "lt0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/lt0Filler.json", "sourceHash" : "8c4640067abed7206324348cb90d1d499c1e6f8f7ec5b3bdd6ea8c62ce7fc8b2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000600260000310600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x8ac7230489e80000" }, "gas" : "0x017306", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000600260000310600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000600260000310600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/lt1.json ================================================ { "lt1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/lt1Filler.json", "sourceHash" : "3ddb48b8cc6dc67dc7c7f4f804db8ad2739565020f06fbd3c9636a454049ae86" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600003600010600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x8ac7230489e80000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x8ac7230489e80000", "code" : "0x6002600003600010600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x8ac7230489e80000", "code" : "0x6002600003600010600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/lt2.json ================================================ { "lt2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/lt2Filler.json", "sourceHash" : "1fe431426fd45116ab7fd624909b52c1dd905887d087b5cdcdbef664c1d1bfa2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x8ac7230489e80000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x8ac7230489e80000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x8ac7230489e80000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/lt3.json ================================================ { "lt3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/lt3Filler.json", "sourceHash" : "79ab580a8f6e442539c2aeaa1fdfca3d0d12d3e85d8bc124db331f19de4bd9fa" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600010600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600010600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600010600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/not0.json ================================================ { "not0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/not0Filler.json", "sourceHash" : "80140479a2b011050f7ed80dfba95f9c00440635a371693d6f8a7b1e3e21ef44" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600019600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013877", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600019600055", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600019600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/not1.json ================================================ { "not1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/not1Filler.json", "sourceHash" : "61f2abd58fadf0341f0d0743279d10fb152cf42b78ed8ce2a6c8a749c9274332" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600219600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013877", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600219600055", "nonce" : "0x00", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600219600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/not2.json ================================================ { "not2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/not2Filler.json", "sourceHash" : "ef8e55a7bab388cf9472c4d331aeb4ca059675b73fa647dac1ca0b2524cf91b1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/not3.json ================================================ { "not3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/not3Filler.json", "sourceHash" : "bd3ee9eaf6195c4cdcd8f9620da701fd0cfff77824ef02e6f65743d7a0433d21" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600260000319600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013871", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600260000319600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600260000319600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/not4.json ================================================ { "not4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/not4Filler.json", "sourceHash" : "f4a5202e1416c1b53b6b4150f295f9a008c8904171c04d0eacb419364cb64de6" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000319600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013871", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000319600055", "nonce" : "0x00", "storage" : { "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000319600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/not5.json ================================================ { "not5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/not5Filler.json", "sourceHash" : "e8c79e98f719d804dc6c480f771278ade666e1a97af54043a6f7b9260d0a17d9" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600060000319600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013871", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600060000319600055", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x600060000319600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/or0.json ================================================ { "or0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/or0Filler.json", "sourceHash" : "60d30a058afaca0a4b0433cb750a882fcb964babe2675d590bf875003bbcd663" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600217600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600217600055", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600217600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/or1.json ================================================ { "or1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/or1Filler.json", "sourceHash" : "2b15c764efc21f1210ab5ff1ebbc41c279eb184ea5970f83fa814aec8b1b0292" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600217600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600217600055", "nonce" : "0x00", "storage" : { "0x00" : "0x03" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600217600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/or2.json ================================================ { "or2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/or2Filler.json", "sourceHash" : "ab771b280d2f0bfc691b93a7767de24ec2f71a43b8247979b22dfa49a521af15" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600317600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600317600055", "nonce" : "0x00", "storage" : { "0x00" : "0x03" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600317600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/or3.json ================================================ { "or3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/or3Filler.json", "sourceHash" : "4f201fc156a840f69212d6f16e5c3648386df255dd52461555458d04b6413ce1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600055", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/or4.json ================================================ { "or4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/or4Filler.json", "sourceHash" : "0e0592c288d6510637595f966ec63289bf101dd48839b10f6fdce743cf3012ad" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/or5.json ================================================ { "or5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/or5Filler.json", "sourceHash" : "0f852bc89f9f883b43f277652d411439032eb3e1c38c316e2ef0a0c20bf6f7ad" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/sgt0.json ================================================ { "sgt0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/sgt0Filler.json", "sourceHash" : "74429fc4319b59fa4f7df388ca07a947def51d79695c7bac6c38d2c4bbbcbdfa" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000600260000313600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017306", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600260000313600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600260000313600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/sgt1.json ================================================ { "sgt1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/sgt1Filler.json", "sourceHash" : "3e4a2036e947ad6771ac9194d6f1f58872d1b2865e23b926d63b1294d031e8bd" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600003600013600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600003600013600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600003600013600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/sgt2.json ================================================ { "sgt2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/sgt2Filler.json", "sourceHash" : "fc4192183cf3a5794822bdab685ac3bc20ac5d9b49cd03b9f98be2260e8e18bb" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff13600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff13600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff13600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/sgt3.json ================================================ { "sgt3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/sgt3Filler.json", "sourceHash" : "e918a6569299b5e0917ec90d3c2bb2828ff490400e2ffbc29e03147743c2e17f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600013600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600013600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600013600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/sgt4.json ================================================ { "sgt4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/sgt4Filler.json", "sourceHash" : "623b92335dbc7baa5925ad95d7ff90160ab49dee7c7a76de9e1795c651987514" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6003600003600560000313600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017300", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6003600003600560000313600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6003600003600560000313600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/slt0.json ================================================ { "slt0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/slt0Filler.json", "sourceHash" : "f510a0b92d9f98666b853cb682b86d4016408a4305ec11ee83627a432b9b75cf" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000600260000312600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600260000312600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6000600260000312600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/slt1.json ================================================ { "slt1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/slt1Filler.json", "sourceHash" : "f428e4e49d4c5f0820c9952b8583209cd93677f6328bd8bff26d55f0f6a1c792" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600003600012600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017306", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600003600012600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600003600012600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/slt2.json ================================================ { "slt2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/slt2Filler.json", "sourceHash" : "094c13e4222baaa5a888b8246ca586ad40d2bfe12abb3566b92d82f018722a8f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/slt3.json ================================================ { "slt3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/slt3Filler.json", "sourceHash" : "70c376b7f2b96131b36bc2b6cae47b71ed9da0586ff154db88eecccc08528d2e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600012600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600012600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600012600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/slt4.json ================================================ { "slt4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/slt4Filler.json", "sourceHash" : "d3a476ad08a0873b4910f4aee5dd8857b4aa4e708e1a13e66836d6483a109702" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6003600003600560000312600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6003600003600560000312600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6003600003600560000312600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/xor0.json ================================================ { "xor0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/xor0Filler.json", "sourceHash" : "50cd2de5dcf00384df0dbaaeec9be0f9029b9134bf7ea41ccc7acc94afef3974" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600218600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600218600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6002600218600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/xor1.json ================================================ { "xor1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/xor1Filler.json", "sourceHash" : "f046ebf7e2d78d47eb651513e53bfc77b24044f1c5f6d985a0001123901b2243" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600218600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600218600055", "nonce" : "0x00", "storage" : { "0x00" : "0x03" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600218600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/xor2.json ================================================ { "xor2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/xor2Filler.json", "sourceHash" : "736386ced72b004a11c09de088a600a13ded13af4403b3142f7b62587f0ff99d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600318600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600318600055", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x6001600318600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/xor3.json ================================================ { "xor3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/xor3Filler.json", "sourceHash" : "ee07af05a441f80e1c4256a31057ba009a4dcc5640f4c920c7ca527554c918de" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18600055", "nonce" : "0x00", "storage" : { "0x00" : "0xfedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/xor4.json ================================================ { "xor4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/xor4Filler.json", "sourceHash" : "a1b253998968b3a29e9deb1019e0b1acd7e164c1a1dd9d930f300ecdd4c032a1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055", "nonce" : "0x00", "storage" : { "0x00" : "0x1111111111111111111111111111111111111111111111111111111111111111" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmBitwiseLogicOperation/xor5.json ================================================ { "xor5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmBitwiseLogicOperation/xor5Filler.json", "sourceHash" : "6305730bcb3953b7c28476aeca3e1e6a95c93e56b0094e4145ea6816b9edea1a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055", "nonce" : "0x00", "storage" : { "0x00" : "0x1111111111111111111111111111101111111111111111111111111111111111" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xd3c21bcecceda1000000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/address0.json ================================================ { "address0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/address0Filler.json", "sourceHash" : "37a0fc3337fde7233f427195a290be689e01aa752a8394b0ae56306fd97d3624" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x30600055", "data" : "0x", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x30600055", "nonce" : "0x00", "storage" : { "0x00" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x30600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/address1.json ================================================ { "address1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/address1Filler.json", "sourceHash" : "2f317db88316ea284d36c3031d82818be81d6cf63d1bba9437dd22705282fe27" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "caller" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "code" : "0x30600055", "data" : "0x", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x30600055", "nonce" : "0x00", "storage" : { "0x00" : "0xcd1722f3947def4cf144679da39c4c32bdc35681" } } }, "pre" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x30600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy0.json ================================================ { "calldatacopy0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy0Filler.json", "sourceHash" : "761871556943693860bdddd26da931c7c3f5a6c8ab95f680aa9d5854135dacd0" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60026001600037600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699c5", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60026001600037600051600055", "nonce" : "0x00", "storage" : { "0x00" : "0x3456000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60026001600037600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy0_return.json ================================================ { "calldatacopy0_return" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy0_returnFiller.json", "sourceHash" : "4f9c0f3aff470ea35ad2fd5a81a593742f875409dbc51200199dd0f2baab261d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60026001600037600051600055596000f3", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699c0", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x3456000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60026001600037600051600055596000f3", "nonce" : "0x00", "storage" : { "0x00" : "0x3456000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60026001600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy1.json ================================================ { "calldatacopy1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy1Filler.json", "sourceHash" : "65659a844a3d4458eb82347f1ef56c3657abdb06f7166b033329db7c2c8cdb78" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016001600037600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699c5", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016001600037600051600055", "nonce" : "0x00", "storage" : { "0x00" : "0x3400000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016001600037600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy1_return.json ================================================ { "calldatacopy1_return" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy1_returnFiller.json", "sourceHash" : "671deccb615f7d6e58bc195d11ad4fde489a6a07581f9e32e029e6cf42dba991" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016001600037600051600055596000f3", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699c0", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x3400000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60016001600037600051600055596000f3", "nonce" : "0x00", "storage" : { "0x00" : "0x3400000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60016001600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy2.json ================================================ { "calldatacopy2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy2Filler.json", "sourceHash" : "3acb5771658d79d6ff4e17b69cfeea9bcc5e51ab11afb0c511b4d7be801e71d4" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006001600037600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d460", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006001600037600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006001600037600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy2_return.json ================================================ { "calldatacopy2_return" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy2_returnFiller.json", "sourceHash" : "4268c07197871b5b5c14bcda3f746a2bb787c8dba2d987bf3c1fb0bc1fc4db4c" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006001600037600051600055596000f3", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d45b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60006001600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60006001600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopyUnderFlowerror.json ================================================ { "calldatacopyUnderFlowerror" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopyUnderFlowFiller.json", "sourceHash" : "55ea90b15f19bf8f4838c35234d202eab4473284e5895af23b885368f34200a1" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600237", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600237", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion.json ================================================ { "calldatacopyZeroMemExpansion" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopyZeroMemExpansionFiller.json", "sourceHash" : "99d8509de4a25c88abd0647c68310552c67f395a92f4e6a8e67cc3707af076c5" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006000600037600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d460", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006000600037600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006000600037600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_return.json ================================================ { "calldatacopyZeroMemExpansion_return" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_returnFiller.json", "sourceHash" : "b00f6239c55457bfec8870ad2ffaa42b2b53228c4f610eba391b8ce561dc9d4f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006000600037600051600055596000f3", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d45b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60006000600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60006000600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh.json ================================================ { "calldatacopy_DataIndexTooHigh" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy_DataIndexTooHighFiller.json", "sourceHash" : "72c5c7337895354e6d12b41ef4f144db87f945068a1a20134168f7e63f61a0d7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d433", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2.json ================================================ { "calldatacopy_DataIndexTooHigh2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2Filler.json", "sourceHash" : "bf92d18c0d12f1e9d48a5cf116ece7559ad36d67383a8b25792b4b6003180304" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d45d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_return.json ================================================ { "calldatacopy_DataIndexTooHigh2_return" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_returnFiller.json", "sourceHash" : "990882750573f3f5938a3f2cd66b0f41c842538f70d70045e179d246b8a076e0" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055596000f3", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d458", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_return.json ================================================ { "calldatacopy_DataIndexTooHigh_return" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_returnFiller.json", "sourceHash" : "640a52c64dfe9f43c6c5bb1aa4fc2a95839f352533e95fabe5493ff142b210c7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055596000f3", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d42e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatacopy_sec.json ================================================ { "calldatacopy_sec" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatacopy_secFiller.json", "sourceHash" : "9c7568cda862ed10722f83b99c948af03cb38ae4042d45fa55aae12cca979f88" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6005565b005b6042601f536101036000601f3760005180606014600357640badc0ffee60ff55", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x1748769964", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x6005565b005b6042601f536101036000601f3760005180606014600357640badc0ffee60ff55", "nonce" : "0x00", "storage" : { "0xff" : "0x0badc0ffee" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x6005565b005b6042601f536101036000601f3760005180606014600357640badc0ffee60ff55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldataload0.json ================================================ { "calldataload0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldataload0Filler.json", "sourceHash" : "3bfae7447ad076b4da51568b72acb70e9bd946fbf68a79705015c4600d9d99de" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600035600055", "data" : "0x2560", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699d7", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600035600055", "nonce" : "0x00", "storage" : { "0x00" : "0x2560000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600035600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldataload1.json ================================================ { "calldataload1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldataload1Filler.json", "sourceHash" : "3cda66b7abff563a2178c736c6ff9235784bbc4083083c1880268c1f32281606" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600135600055", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699d7", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600135600055", "nonce" : "0x00", "storage" : { "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600135600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldataload2.json ================================================ { "calldataload2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldataload2Filler.json", "sourceHash" : "0274681bf0559ab144aa2273cd566d1b32bcc58843ca142e8c6e6fd567196882" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600535600055", "data" : "0x123456789abcdef00000000000000000000000000000000000000000000000000024", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699d7", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600535600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbcdef00000000000000000000000000000000000000000000000000024000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600535600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldataloadSizeTooHigh.json ================================================ { "calldataloadSizeTooHigh" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldataloadSizeTooHighFiller.json", "sourceHash" : "0a556d7e2b38d3ac82c12938237c81673868011512d36133443339bc000d56c5" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055", "data" : "0x123456789abcdef00000000000000000000000000000000000000000000000000024", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d46f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldataloadSizeTooHighPartial.json ================================================ { "calldataloadSizeTooHighPartial" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldataloadSizeTooHighPartialFiller.json", "sourceHash" : "8090196f324f686f77a7d362987f8697cfc7b6b3bd86d702a212d790ec12ef0f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a35600055", "data" : "0x123456789abcdef00000000000000000000000000000000000000000000024", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699d7", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a35600055", "nonce" : "0x00", "storage" : { "0x00" : "0x240000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a35600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldataload_BigOffset.json ================================================ { "calldataload_BigOffset" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldataload_BigOffsetFiller.json", "sourceHash" : "e118bc308ccdd052ea601f5cfa51d32fc907952cb1cd16e673bff87f8c9fe203" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f420000000000000000000000000000000000000000000000000000000000000035600055", "data" : "0x4200000000000000000000000000000000000000000000000000000000000000", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d46f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f420000000000000000000000000000000000000000000000000000000000000035600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f420000000000000000000000000000000000000000000000000000000000000035600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatasize0.json ================================================ { "calldatasize0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatasize0Filler.json", "sourceHash" : "e638e627686d20765a98fa8cfab03c642bdf33216a5869e742994072c8fd051e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x36600055", "data" : "0x2560", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x36600055", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x36600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatasize1.json ================================================ { "calldatasize1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatasize1Filler.json", "sourceHash" : "7db2dda9d80c7eac5ae82d3e2573e7f9b47ad6cb0c5545824e2500e85ec1cc3c" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x36600055", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x36600055", "nonce" : "0x00", "storage" : { "0x00" : "0x21" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x36600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/calldatasize2.json ================================================ { "calldatasize2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/calldatasize2Filler.json", "sourceHash" : "cbd842b7c2ff77d176d3d7b5f200e908c22e47ee9a7d0f5294be85c917119f1e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x36600055", "data" : "0x230000000000000000000000000000000000000000000000000000000000000023", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x36600055", "nonce" : "0x00", "storage" : { "0x00" : "0x21" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x36600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/caller.json ================================================ { "caller" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/callerFiller.json", "sourceHash" : "79214a9fde65ef8c878dbf8e03a06a75483536d289ad19e56b95fdef57b1da3d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x33600055", "data" : "0x", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x33600055", "nonce" : "0x00", "storage" : { "0x00" : "0xcd1722f3947def4cf144679da39c4c32bdc35681" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x33600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/callvalue.json ================================================ { "callvalue" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/callvalueFiller.json", "sourceHash" : "4eabc176dc48df11702d9ddf6e8501c62035436adb16aa7cd79769ab273d583a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x34600055", "data" : "0x", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x34600055", "nonce" : "0x00", "storage" : { "0x00" : "0x0de0b6b3a7640000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x34600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/codecopy0.json ================================================ { "codecopy0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/codecopy0Filler.json", "sourceHash" : "9354634ed14a9667c8c883c3a4eceaae263bcd3d4fe47683aa0f38f45fe877e9" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60056000600039600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699c5", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60056000600039600051600055", "nonce" : "0x00", "storage" : { "0x00" : "0x6005600060000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60056000600039600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/codecopyZeroMemExpansion.json ================================================ { "codecopyZeroMemExpansion" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/codecopyZeroMemExpansionFiller.json", "sourceHash" : "41a8841a95018c2d228db91d29d0b75992f9a166e4207362e79d17229974ddfd" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006000600039600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d460", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006000600039600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006000600039600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/codecopy_DataIndexTooHigh.json ================================================ { "codecopy_DataIndexTooHigh" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/codecopy_DataIndexTooHighFiller.json", "sourceHash" : "f6fac567f89aaca85c34c5a88b98870d1f7e2509b26ec566232c5d107741c6f4" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x174876d45d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/codesize.json ================================================ { "codesize" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/codesizeFiller.json", "sourceHash" : "632259bbd9962abfa58ec3b9e7b80a8f3babcdb47592bbc511fa5e4c0bc3ce3f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x38600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x38600055", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x38600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/gasprice.json ================================================ { "gasprice" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/gaspriceFiller.json", "sourceHash" : "b94e3c994e54e24b85ef80fc16f53827cd26ef01fa4a96908a20e646f57d1e48" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x3a600055", "data" : "0x1234567890abcdef01234567890abcdef0", "gas" : "0x174876e800", "gasPrice" : "0x075bcd15", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x3a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x075bcd15" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x3a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmEnvironmentalInfo/origin.json ================================================ { "origin" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmEnvironmentalInfo/originFiller.json", "sourceHash" : "4d51cb9ee576e04b08a74a6a4ba3f10284ee1f735dd068abd7a0e551324f45be" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x32600055", "data" : "0x", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699db", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x32600055", "nonce" : "0x00", "storage" : { "0x00" : "0xcd1722f3947def4cf144679da39c4c32bdc35681" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x32600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest.json ================================================ { "BlockNumberDynamicJump0_AfterJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdestFiller.json", "sourceHash" : "edd08521b4a9bc311f2ba99d15c867d9a98da1e9665d9b173ff85621e170e896" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600843015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600843015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest3.json ================================================ { "BlockNumberDynamicJump0_AfterJumpdest3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest3Filler.json", "sourceHash" : "1e86dccd54bd74436a1bbfe11302b675761fc6138ebd1461231acd29ee97b0f0" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600b60085043015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600b60085043015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGas.json ================================================ { "BlockNumberDynamicJump0_foreverOutOfGas" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGasFiller.json", "sourceHash" : "0900beba73811b8aafaefadcff3a7cd9954ccb5e4986b9cf03ca44881efd4e9c" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5b600060000156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5b600060000156", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0.json ================================================ { "BlockNumberDynamicJump0_jumpdest0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0Filler.json", "sourceHash" : "80bfa0a5db107e6f083dccdd3091e35add39a4eaac4a8757de8a3e4008c5d646" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600743015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013869", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600743015660015b600255", "nonce" : "0x00", "storage" : { "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600743015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2.json ================================================ { "BlockNumberDynamicJump0_jumpdest2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2Filler.json", "sourceHash" : "e86a87e0b5cde7d47f1e5dc295600ecc60b7344b3fb4ad64609d6b87fae642f8" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600a60085043015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013864", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a60085043015660015b600255", "nonce" : "0x00", "storage" : { "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a60085043015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_withoutJumpdest.json ================================================ { "BlockNumberDynamicJump0_withoutJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump0_withoutJumpdestFiller.json", "sourceHash" : "6f1fc4a9e5dff3e5d3071c576aba5b2ee1f30d7dcace92e6c6d230cfd415efd7" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360074301566001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360074301566001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump1.json ================================================ { "BlockNumberDynamicJump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJump1Filler.json", "sourceHash" : "88e43b5985cc4dfbcbc8476c570157e6e7bc0ee0cb3609e9e9f3dd9aa2a3a528" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x620fffff620fffff01430156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x620fffff620fffff01430156", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithJumpDest.json ================================================ { "BlockNumberDynamicJumpInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithJumpDestFiller.json", "sourceHash" : "ca0f21a5f52a8d4f2d6e1eed650f68d5f8f40e567cf17984aacc228adfa578ab" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6004430156655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6004430156655b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithoutJumpDest.json ================================================ { "BlockNumberDynamicJumpInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithoutJumpDestFiller.json", "sourceHash" : "183a4ce2d0f208630db92539aaf4e38fc3025b44a2842e19e39e956465449fe5" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600543015661eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600543015661eeff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpi0.json ================================================ { "BlockNumberDynamicJumpi0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpi0Filler.json", "sourceHash" : "620bba922f5a1732f512d726a26e71b09d3837018a66a9aacb581b212a4f4b13" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600160094301576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600160094301576001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1.json ================================================ { "BlockNumberDynamicJumpi1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpi1Filler.json", "sourceHash" : "91d6fe3848fbdafff10b7bd503d560f2c614d6b53ed16b51821d3026f4a3a544" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600060094301576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013862", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600060094301576001600255", "nonce" : "0x00", "storage" : { "0x02" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600060094301576001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1_jumpdest.json ================================================ { "BlockNumberDynamicJumpi1_jumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpi1_jumpdestFiller.json", "sourceHash" : "420810639c740487f7b8d18b29f28dcfb7d762b1aa4aa9b9f8b91928da66a539" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236001600a43015760015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236001600a43015760015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStop.json ================================================ { "BlockNumberDynamicJumpiAfterStop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStopFiller.json", "sourceHash" : "7331cec587701bf695329ad94c7e62963827209faffac3b24eb59341ccb1a925" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600160084301570060015b6002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013864", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600160084301570060015b6002600355", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600160084301570060015b6002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpiOutsideBoundary.json ================================================ { "BlockNumberDynamicJumpiOutsideBoundary" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpiOutsideBoundaryFiller.json", "sourceHash" : "db80ec0400be086e2a316a91ee7a5f87db06ff6a5b0ad27a50ba692049a54b1c" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04301576002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04301576002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithJumpDest.json ================================================ { "BlockNumberDynamicJumpifInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithJumpDestFiller.json", "sourceHash" : "4b52bc3a45a966d0032eb01b3fdb8a225af48fa4f5a017b5dff3d4d88d710337" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016006430157655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016006430157655b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithoutJumpDest.json ================================================ { "BlockNumberDynamicJumpifInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithoutJumpDestFiller.json", "sourceHash" : "3fccd0c56ebfd40dea69fec03d009967a80ddf93e9a68af81efd2d1645e27fcb" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600743015761eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600743015761eeff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DyanmicJump0_outOfBoundary.json ================================================ { "DyanmicJump0_outOfBoundary" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DyanmicJump0_outOfBoundaryFiller.json", "sourceHash" : "a2ae635e97f7381a5af1ea432d210faf19f4f84e8e0e6874bd48005674bfea92" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600760005401566001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600760005401566001600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest.json ================================================ { "DynamicJump0_AfterJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump0_AfterJumpdestFiller.json", "sourceHash" : "605f607251cd4a7c73bd7c814edcada6a9008fcd2896af2caf371beb31db196b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360086003015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360086003015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest3.json ================================================ { "DynamicJump0_AfterJumpdest3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump0_AfterJumpdest3Filler.json", "sourceHash" : "b7367314ce66b1a937c05550ac901971b5850d2a0ef03acf1feb4d6c9f38925d" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600b6008506003015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600b6008506003015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump0_foreverOutOfGas.json ================================================ { "DynamicJump0_foreverOutOfGas" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump0_foreverOutOfGasFiller.json", "sourceHash" : "68b687a344b0f44d7459e095f05f6b302ee3f5d15b3c3e7765d5642fb1f46689" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5b600060000156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5b600060000156", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump0_jumpdest0.json ================================================ { "DynamicJump0_jumpdest0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump0_jumpdest0Filler.json", "sourceHash" : "3ab9d036e3e345909b19022f4c3b80d081d214eb5c79b8e94e0f2c660ab01ec7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360076003015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360076003015660015b600255", "nonce" : "0x00", "storage" : { "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360076003015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump0_jumpdest2.json ================================================ { "DynamicJump0_jumpdest2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump0_jumpdest2Filler.json", "sourceHash" : "a7e9d9f046151930ef4b51b8dacce5304ce74c3f5ead80f1e52f783b1a704378" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600a6008506003015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013863", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a6008506003015660015b600255", "nonce" : "0x00", "storage" : { "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a6008506003015660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump0_withoutJumpdest.json ================================================ { "DynamicJump0_withoutJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump0_withoutJumpdestFiller.json", "sourceHash" : "84c524e0cafc2ddcebdef720e46a23d10061f4a35bb06bfe7bdfe444990593a6" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236007600301566001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236007600301566001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump1.json ================================================ { "DynamicJump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump1Filler.json", "sourceHash" : "2369bac56afc1e0946f608c52027fbc88faf3844cdc2fa46954a0916221b8432" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x620fffff620fffff0160030156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x620fffff620fffff0160030156", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpAfterStop.json ================================================ { "DynamicJumpAfterStop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpAfterStopFiller.json", "sourceHash" : "5ba8a9cb65319cdc8e574e0eb59695b55158e6d723945bac3b96573a576a86a8" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6008600101560060015b6002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6008600101560060015b6002600355", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6008600101560060015b6002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpInsidePushWithJumpDest.json ================================================ { "DynamicJumpInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpInsidePushWithJumpDestFiller.json", "sourceHash" : "3f3586292e12e696029f38f833fe8c7cea86a0e7cda83c0cbe783aa2c3b22b0c" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600460030156655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460030156655b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpInsidePushWithoutJumpDest.json ================================================ { "DynamicJumpInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpInsidePushWithoutJumpDestFiller.json", "sourceHash" : "4e320bace2f65884d59f95dbbba6e4f9aea39e243bffd309be9bb6c5a3c1bedb" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60056003015661eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60056003015661eeff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps0.json ================================================ { "DynamicJumpJD_DependsOnJumps0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps0Filler.json", "sourceHash" : "e96143bec9697fb0d565026f5fcc5ed70833bf89eb8c63aa87e0155b4e61d8f4" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x01", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6009436006575b566001", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6009436006575b566001", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1.json ================================================ { "DynamicJumpJD_DependsOnJumps1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1Filler.json", "sourceHash" : "853f3f35881b9db63508e68d34cf87a1a3697fdc969821c0659462242d859c2b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x01", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a436006575b5660015b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a436006575b5660015b6001600155", "nonce" : "0x00", "storage" : { "0x01" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a436006575b5660015b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpPathologicalTest0.json ================================================ { "DynamicJumpPathologicalTest0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpPathologicalTest0Filler.json", "sourceHash" : "6862ac2a8fad0b3c043493fcd9c9a7e8a549c9f3ef34019ac0d7bcfd096a8040" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x04", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x435660615b4343025660615b60615b5b5b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x435660615b4343025660615b60615b5b5b6001600155", "nonce" : "0x00", "storage" : { "0x01" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x435660615b4343025660615b60615b5b5b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpPathologicalTest1.json ================================================ { "DynamicJumpPathologicalTest1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpPathologicalTest1Filler.json", "sourceHash" : "dfbad553b0e28f37f6a5d72740e2ae6bf17ce1b19c62caf2cc2a99c0d1d84e05" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x04", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x435660615b4343025660615b60615b605b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x435660615b4343025660615b60615b605b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpPathologicalTest2.json ================================================ { "DynamicJumpPathologicalTest2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpPathologicalTest2Filler.json", "sourceHash" : "957bc609a0322452da86a59c96e7eea17c5463dcd7bad6ed97b57c6460a90b80" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x04", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x435631615b60615b60615b606001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x435631615b60615b60615b606001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpPathologicalTest3.json ================================================ { "DynamicJumpPathologicalTest3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpPathologicalTest3Filler.json", "sourceHash" : "a906b3dcb41da1cdacb67bdf49111ecd2bdaab0e3584dbd3993ef0f0555766f6" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x07", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x435631615b60615b60615b606001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x435631615b60615b60615b606001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpStartWithJumpDest.json ================================================ { "DynamicJumpStartWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpStartWithJumpDestFiller.json", "sourceHash" : "4fb19acd65703dce630cb655f52e98d2de72d8a790d53b895d0e7bce603d4166" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5b586000555960115758600052596000575b58600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x011126", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5b586000555960115758600052596000575b58600055", "nonce" : "0x00", "storage" : { "0x00" : "0x12" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5b586000555960115758600052596000575b58600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump_value1.json ================================================ { "DynamicJump_value1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump_value1Filler.json", "sourceHash" : "20503c4d21019e3d9d87b95365a0d0417fb7e163265f938d6e3f685377a2c5da" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x08" }, "gas" : "0x01867a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000001", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump_value2.json ================================================ { "DynamicJump_value2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump_value2Filler.json", "sourceHash" : "00631169ba52dbbd3d7ac8529dd960c6b297226c0f177ee3e0ef8bd202b4b1ff" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x12" }, "gas" : "0x01867c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000002", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump_value3.json ================================================ { "DynamicJump_value3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump_value3Filler.json", "sourceHash" : "a1477eeb656e1f4d09c07f020a088cc099f6661fce88f137754b1d45550d7218" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x1b" }, "gas" : "0x01867e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000003", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJump_valueUnderflow.json ================================================ { "DynamicJump_valueUnderflow" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJump_valueUnderflowFiller.json", "sourceHash" : "37f012edfeaa13e4819617af0e8dc2fd71d738a2463b1f61bfd86de0ef980f1b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b505050600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x1b" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016002600334565b5050600052596000f35b50600052596000f35b505050600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpi0.json ================================================ { "DynamicJumpi0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpi0Filler.json", "sourceHash" : "394cae3e06d120cc1a5df5e14cfae3598d62e1fefa06dce4055c6ff59c367b63" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360016009600301576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360016009600301576001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpi1.json ================================================ { "DynamicJumpi1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpi1Filler.json", "sourceHash" : "31d323d1c24dd2c2ea5a4e18fd0765bfa1be189add7e395b2679bf5a98e492ab" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360006009600301576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013861", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360006009600301576001600255", "nonce" : "0x00", "storage" : { "0x02" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360006009600301576001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpi1_jumpdest.json ================================================ { "DynamicJumpi1_jumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpi1_jumpdestFiller.json", "sourceHash" : "fb4060a7f68c0f3ad9643dcfc93fa90ea0fe6123e65499ae65f400e22db20bcc" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236001600a6003015760015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236001600a6003015760015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpiAfterStop.json ================================================ { "DynamicJumpiAfterStop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpiAfterStopFiller.json", "sourceHash" : "d61d45e9d5ea3e13d2a8a33965c9c620207156e0b4baf2dfed9a0288c7e8053b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016008600301570060015b6002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013863", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016008600301570060015b6002600355", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016008600301570060015b6002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpiOutsideBoundary.json ================================================ { "DynamicJumpiOutsideBoundary" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpiOutsideBoundaryFiller.json", "sourceHash" : "d550aa41047204857f27b7a80a1309520f3e59b41a87ef3e40492032706e5a88" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0600301576002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0600301576002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithJumpDest.json ================================================ { "DynamicJumpifInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpifInsidePushWithJumpDestFiller.json", "sourceHash" : "05f764377385769e93afe47dbc0293921c211b4e68afce30f18cba4bb5955420" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600660030157655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600660030157655b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithoutJumpDest.json ================================================ { "DynamicJumpifInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/DynamicJumpifInsidePushWithoutJumpDestFiller.json", "sourceHash" : "cadedb13e141e3b7bf1f0763cc831dace3ff150fc623e81fb00e798168d01188" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600160076003015761eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600160076003015761eeff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest.json ================================================ { "JDfromStorageDynamicJump0_AfterJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdestFiller.json", "sourceHash" : "06126bb58e44948750e412ea81a3140fcc72b63acec0090939706f3ceb403ae8" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236008600054015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236008600054015660015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest3.json ================================================ { "JDfromStorageDynamicJump0_AfterJumpdest3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest3Filler.json", "sourceHash" : "52880726a50d86ffdaea78e4a5d3293643688543eea049172fbf51e564f28f5b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600b600850600054015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600b600850600054015660015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGas.json ================================================ { "JDfromStorageDynamicJump0_foreverOutOfGas" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGasFiller.json", "sourceHash" : "a3046ce1b7f78c109aa36c29db004850ad5b3b4129d9085849b7af04b719826c" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5b600060000156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5b600060000156", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0.json ================================================ { "JDfromStorageDynamicJump0_jumpdest0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0Filler.json", "sourceHash" : "2f836ba88951147677580e5de7d8d40b0ca72938894aa351096945d7962c8f62" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236007600054015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013836", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236007600054015660015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04", "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236007600054015660015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2.json ================================================ { "JDfromStorageDynamicJump0_jumpdest2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2Filler.json", "sourceHash" : "efe088c5366793bcb3339225486608b15750524274baf8d5f9f592c0d5e327f2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600a600850600054015660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013831", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a600850600054015660015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04", "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a600850600054015660015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_withoutJumpdest.json ================================================ { "JDfromStorageDynamicJump0_withoutJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump0_withoutJumpdestFiller.json", "sourceHash" : "696ced07844f15bee009a7c294048b5bf531923787279c19bf1c3150a46bf0ff" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600760005401566001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600760005401566001600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump1.json ================================================ { "JDfromStorageDynamicJump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJump1Filler.json", "sourceHash" : "bf061c0eb83d11c310f7ec309e56c3629f715727b41cc0e0772991060404cfc9" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x620fffff620fffff016000540156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x620fffff620fffff016000540156", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithJumpDest.json ================================================ { "JDfromStorageDynamicJumpInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithJumpDestFiller.json", "sourceHash" : "561a67bc9db1011fb26151b03adcc53b2f4f55e03292c1e98e3361250c87d38a" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60046000540156655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60046000540156655b6001600155", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithoutJumpDest.json ================================================ { "JDfromStorageDynamicJumpInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithoutJumpDestFiller.json", "sourceHash" : "53a491adcc7da05748ad36809954552784007b884cd960e05ebb07a2ddd0452b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6005600054015661eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600054015661eeff", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi0.json ================================================ { "JDfromStorageDynamicJumpi0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpi0Filler.json", "sourceHash" : "14e786db1b2df2c2a40be1a80c61baec311572eb481a3afd1b31fb95a3ad937d" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236001600960005401576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236001600960005401576001600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1.json ================================================ { "JDfromStorageDynamicJumpi1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpi1Filler.json", "sourceHash" : "f90389bdfe2c1600f16db3b5ff8289b55a9f3d2c56dd18403c4e636440a98a9d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236000600960005401576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01382f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236000600960005401576001600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04", "0x02" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236000600960005401576001600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1_jumpdest.json ================================================ { "JDfromStorageDynamicJumpi1_jumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpi1_jumpdestFiller.json", "sourceHash" : "cc7eadaee4927a2753204e40d7028ae1ed3e1ef4c9a2e8a79460a3e07f5bcafe" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236001600a600054015760015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236001600a600054015760015b600255", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStop.json ================================================ { "JDfromStorageDynamicJumpiAfterStop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStopFiller.json", "sourceHash" : "80d903064c1050cf1a2e527b8938e610e77822d55c83cf4a07e18586baa0bec1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600860005401570060015b6002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013831", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600860005401570060015b6002600355", "nonce" : "0x00", "storage" : { "0x00" : "0x04", "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600860005401570060015b6002600355", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiOutsideBoundary.json ================================================ { "JDfromStorageDynamicJumpiOutsideBoundary" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpiOutsideBoundaryFiller.json", "sourceHash" : "3c7f35eb2fe3c2ed05679b25f89e81e50fa959c8a665cf4545552f75a3b7140b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff060005401576002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff060005401576002600355", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithJumpDest.json ================================================ { "JDfromStorageDynamicJumpifInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithJumpDestFiller.json", "sourceHash" : "f15ca2a706c969bb0f9f4b7101efd666eebae5520f893a586a7a529b0dc7d4d8" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600160066000540157655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600160066000540157655b6001600155", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithoutJumpDest.json ================================================ { "JDfromStorageDynamicJumpifInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithoutJumpDestFiller.json", "sourceHash" : "561fed985eda1bbc4448ad363f6fa69a1d1b503d9d7e0017bcd49aaaf916f333" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x02", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016007600054015761eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016007600054015761eeff", "nonce" : "0x00", "storage" : { "0x00" : "0x04" } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/bad_indirect_jump1.json ================================================ { "bad_indirect_jump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/bad_indirect_jump1Filler.json", "sourceHash" : "15744a7158d6982822dc8a0c272c329f8dfdf93810e8f2f3f468a56db9bd2d90" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x601b602502565b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x601b602502565b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/bad_indirect_jump2.json ================================================ { "bad_indirect_jump2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/bad_indirect_jump2Filler.json", "sourceHash" : "6dd2730ab6f27b43eead1633f104f5d60d6a98fa7c81d5a8ba0d2f6434706813" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016003600302576000600056", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016003600302576000600056", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/byte1.json ================================================ { "byte1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/byte1Filler.json", "sourceHash" : "4bbf3058007fbacf83926bd908a1f886cb4403aa10a95030f2da18e1ad68707b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f112233445566778899001122334455667788990011223344556677889900aabb60001a7f112233445566778899001122334455667788990011223344556677889900aabb60011a7f112233445566778899001122334455667788990011223344556677889900aabb60021a7f112233445566778899001122334455667788990011223344556677889900aabb60031a7f112233445566778899001122334455667788990011223344556677889900aabb60041a7f112233445566778899001122334455667788990011223344556677889900aabb60051a7f112233445566778899001122334455667788990011223344556677889900aabb60061a7f112233445566778899001122334455667788990011223344556677889900aabb60071a7f112233445566778899001122334455667788990011223344556677889900aabb60081a7f112233445566778899001122334455667788990011223344556677889900aabb60091a7f112233445566778899001122334455667788990011223344556677889900aabb600a1a7f112233445566778899001122334455667788990011223344556677889900aabb600b1a7f112233445566778899001122334455667788990011223344556677889900aabb600c1a7f112233445566778899001122334455667788990011223344556677889900aabb600d1a7f112233445566778899001122334455667788990011223344556677889900aabb600e1a7f112233445566778899001122334455667788990011223344556677889900aabb600f1a7f112233445566778899001122334455667788990011223344556677889900aabb60101a7f112233445566778899001122334455667788990011223344556677889900aabb60111a7f112233445566778899001122334455667788990011223344556677889900aabb60121a7f112233445566778899001122334455667788990011223344556677889900aabb60131a7f112233445566778899001122334455667788990011223344556677889900aabb60141a7f112233445566778899001122334455667788990011223344556677889900aabb60151a7f112233445566778899001122334455667788990011223344556677889900aabb60161a7f112233445566778899001122334455667788990011223344556677889900aabb60171a7f112233445566778899001122334455667788990011223344556677889900aabb60181a7f112233445566778899001122334455667788990011223344556677889900aabb60191a7f112233445566778899001122334455667788990011223344556677889900aabb601a1a7f112233445566778899001122334455667788990011223344556677889900aabb601b1a7f112233445566778899001122334455667788990011223344556677889900aabb601c1a7f112233445566778899001122334455667788990011223344556677889900aabb601d1a7f112233445566778899001122334455667788990011223344556677889900aabb601e1a7f112233445566778899001122334455667788990011223344556677889900aabb601f1a7f112233445566778899001122334455667788990011223344556677889900aabb60201a7f112233445566778899001122334455667788990011223344556677889900aabb6107de1a6000600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x0171e0", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f112233445566778899001122334455667788990011223344556677889900aabb60001a7f112233445566778899001122334455667788990011223344556677889900aabb60011a7f112233445566778899001122334455667788990011223344556677889900aabb60021a7f112233445566778899001122334455667788990011223344556677889900aabb60031a7f112233445566778899001122334455667788990011223344556677889900aabb60041a7f112233445566778899001122334455667788990011223344556677889900aabb60051a7f112233445566778899001122334455667788990011223344556677889900aabb60061a7f112233445566778899001122334455667788990011223344556677889900aabb60071a7f112233445566778899001122334455667788990011223344556677889900aabb60081a7f112233445566778899001122334455667788990011223344556677889900aabb60091a7f112233445566778899001122334455667788990011223344556677889900aabb600a1a7f112233445566778899001122334455667788990011223344556677889900aabb600b1a7f112233445566778899001122334455667788990011223344556677889900aabb600c1a7f112233445566778899001122334455667788990011223344556677889900aabb600d1a7f112233445566778899001122334455667788990011223344556677889900aabb600e1a7f112233445566778899001122334455667788990011223344556677889900aabb600f1a7f112233445566778899001122334455667788990011223344556677889900aabb60101a7f112233445566778899001122334455667788990011223344556677889900aabb60111a7f112233445566778899001122334455667788990011223344556677889900aabb60121a7f112233445566778899001122334455667788990011223344556677889900aabb60131a7f112233445566778899001122334455667788990011223344556677889900aabb60141a7f112233445566778899001122334455667788990011223344556677889900aabb60151a7f112233445566778899001122334455667788990011223344556677889900aabb60161a7f112233445566778899001122334455667788990011223344556677889900aabb60171a7f112233445566778899001122334455667788990011223344556677889900aabb60181a7f112233445566778899001122334455667788990011223344556677889900aabb60191a7f112233445566778899001122334455667788990011223344556677889900aabb601a1a7f112233445566778899001122334455667788990011223344556677889900aabb601b1a7f112233445566778899001122334455667788990011223344556677889900aabb601c1a7f112233445566778899001122334455667788990011223344556677889900aabb601d1a7f112233445566778899001122334455667788990011223344556677889900aabb601e1a7f112233445566778899001122334455667788990011223344556677889900aabb601f1a7f112233445566778899001122334455667788990011223344556677889900aabb60201a7f112233445566778899001122334455667788990011223344556677889900aabb6107de1a6000600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f112233445566778899001122334455667788990011223344556677889900aabb60001a7f112233445566778899001122334455667788990011223344556677889900aabb60011a7f112233445566778899001122334455667788990011223344556677889900aabb60021a7f112233445566778899001122334455667788990011223344556677889900aabb60031a7f112233445566778899001122334455667788990011223344556677889900aabb60041a7f112233445566778899001122334455667788990011223344556677889900aabb60051a7f112233445566778899001122334455667788990011223344556677889900aabb60061a7f112233445566778899001122334455667788990011223344556677889900aabb60071a7f112233445566778899001122334455667788990011223344556677889900aabb60081a7f112233445566778899001122334455667788990011223344556677889900aabb60091a7f112233445566778899001122334455667788990011223344556677889900aabb600a1a7f112233445566778899001122334455667788990011223344556677889900aabb600b1a7f112233445566778899001122334455667788990011223344556677889900aabb600c1a7f112233445566778899001122334455667788990011223344556677889900aabb600d1a7f112233445566778899001122334455667788990011223344556677889900aabb600e1a7f112233445566778899001122334455667788990011223344556677889900aabb600f1a7f112233445566778899001122334455667788990011223344556677889900aabb60101a7f112233445566778899001122334455667788990011223344556677889900aabb60111a7f112233445566778899001122334455667788990011223344556677889900aabb60121a7f112233445566778899001122334455667788990011223344556677889900aabb60131a7f112233445566778899001122334455667788990011223344556677889900aabb60141a7f112233445566778899001122334455667788990011223344556677889900aabb60151a7f112233445566778899001122334455667788990011223344556677889900aabb60161a7f112233445566778899001122334455667788990011223344556677889900aabb60171a7f112233445566778899001122334455667788990011223344556677889900aabb60181a7f112233445566778899001122334455667788990011223344556677889900aabb60191a7f112233445566778899001122334455667788990011223344556677889900aabb601a1a7f112233445566778899001122334455667788990011223344556677889900aabb601b1a7f112233445566778899001122334455667788990011223344556677889900aabb601c1a7f112233445566778899001122334455667788990011223344556677889900aabb601d1a7f112233445566778899001122334455667788990011223344556677889900aabb601e1a7f112233445566778899001122334455667788990011223344556677889900aabb601f1a7f112233445566778899001122334455667788990011223344556677889900aabb60201a7f112233445566778899001122334455667788990011223344556677889900aabb6107de1a6000600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/calldatacopyMemExp.json ================================================ { "calldatacopyMemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/calldatacopyMemExpFiller.json", "sourceHash" : "fcf33988ecf7e66eae80382111d1128eb302e201be169ca20b306eac49231142" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60ff630fffffff630fffffff37", "data" : "0x", "gas" : "0x01f4153d80", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60ff630fffffff630fffffff37", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/codecopyMemExp.json ================================================ { "codecopyMemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/codecopyMemExpFiller.json", "sourceHash" : "baf738ce30cb457d16aa2f71f866ce00ddb998371757f2c6a30a5d1ca3a9e135" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60ff630fffffff630fffffff39", "data" : "0x", "gas" : "0x01f4153d80", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60ff630fffffff630fffffff39", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/deadCode_1.json ================================================ { "deadCode_1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/deadCode_1Filler.json", "sourceHash" : "110e1eaddae6dda0225d4f4b430da33494473d9ec10d765e7a5324d3e1ab26c8" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600053596000f300000000000000005b00", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01868f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0100000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600053596000f300000000000000005b00", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600053596000f300000000000000005b00", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/dupAt51becameMload.json ================================================ { "dupAt51becameMload" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/dupAt51becameMloadFiller.json", "sourceHash" : "28d2da26fb721ff16c42b1d398e7410f85560c3373bcc0a424ee1d025bf25ba6" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600260035155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013871", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600260035155", "nonce" : "0x00", "storage" : { "0x00" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600260035155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/for_loop1.json ================================================ { "for_loop1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/for_loop1Filler.json", "sourceHash" : "5e12e078316618a30275a5c133a960d17d242cc3726855a805c112193d39a59e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a6080525b6000608051111560265760a0516080510160a0526001608051036080526005565b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x018351", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a6080525b6000608051111560265760a0516080510160a0526001608051036080526005565b", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a6080525b6000608051111560265760a0516080510160a0526001608051036080526005565b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/for_loop2.json ================================================ { "for_loop2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/for_loop2Filler.json", "sourceHash" : "2764d5106d8f416d7f03ab65334b580f66eff1a74fa4c3fc4b2488dbb621d3c1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006080525b600a608051101560265760a0516080510160a0526001608051016080526005565b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x018351", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006080525b600a608051101560265760a0516080510160a0526001608051016080526005565b", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006080525b600a608051101560265760a0516080510160a0526001608051016080526005565b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/gas0.json ================================================ { "gas0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/gas0Filler.json", "sourceHash" : "344499133ac967decfa379dd507e6df8c81e13b014db2676d943cdd2ed3c09c6" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x64ffffffffff60005261eeee605a525a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005261eeee605a525a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x018680" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005261eeee605a525a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/gas1.json ================================================ { "gas1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/gas1Filler.json", "sourceHash" : "158673d626e8f5b04cbad00e6bcf8bce2a081b61bf98ca0ad11b78e52921444a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5a600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5a600055", "nonce" : "0x00", "storage" : { "0x00" : "0x01869e" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5a600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/gasOverFlow.json ================================================ { "gasOverFlow" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/gasOverFlowFiller.json", "sourceHash" : "01dd61c063b45f54e62e912f6711a3c04bcaba16f40890da37774adedcf5d201" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60035b600190038060025768010000000000000016565b63badf000d60115500", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60035b600190038060025768010000000000000016565b63badf000d60115500", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/indirect_jump1.json ================================================ { "indirect_jump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/indirect_jump1Filler.json", "sourceHash" : "33d6b4fa4d999fa02f0b584e925eef1e0b1f55bfe6bd8ba3bd0339ab20739a34" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600460030156005b6001600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01867d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000001", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460030156005b6001600052596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460030156005b6001600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/indirect_jump2.json ================================================ { "indirect_jump2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/indirect_jump2Filler.json", "sourceHash" : "74d76db6a1761e44af7dea37c2ed941aac2add09cff11950033033cbe6f83248" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600860060156005b6001600052005b6002600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01867d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000002", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600860060156005b6001600052005b6002600052596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600860060156005b6001600052005b6002600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/indirect_jump3.json ================================================ { "indirect_jump3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/indirect_jump3Filler.json", "sourceHash" : "1ca405a29132ed02b16a4e4f1d869eb73904f23759d971c3a7e287260fa13f7b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600460050157005b6001600052596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x018678", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000001", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600460050157005b6001600052596000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600460050157005b6001600052596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/indirect_jump4.json ================================================ { "indirect_jump4" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/indirect_jump4Filler.json", "sourceHash" : "bec771ce98d114d7dacd0f1f33426b85e6092d65bfd73945ea07831737a0d310" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60006007600501576001600052005b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01867e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006007600501576001600052005b", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60006007600501576001600052005b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_AfterJumpdest.json ================================================ { "jump0_AfterJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_AfterJumpdestFiller.json", "sourceHash" : "8e933f0185d188f6eeb002d4ac8dace70a34a196e4c59932957eaac4cef27849" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360085660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360085660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_AfterJumpdest3.json ================================================ { "jump0_AfterJumpdest3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_AfterJumpdest3Filler.json", "sourceHash" : "dc15eff9141416358f3f9960ef23b930d70b7cb8d3e13d7d5b6832954605d062" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600b6008505660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600b6008505660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_foreverOutOfGas.json ================================================ { "jump0_foreverOutOfGas" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_foreverOutOfGasFiller.json", "sourceHash" : "06656a40346ccda59a2d1852d9bb59447d34fb9eb80706e378c5a067e337a080" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5b600056", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5b600056", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_jumpdest0.json ================================================ { "jump0_jumpdest0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_jumpdest0Filler.json", "sourceHash" : "4bf0cfbeda98acdd577972c6a7abcd20f60ab1b48328ce3f804e3cefa7c77bdb" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360075660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360075660015b600255", "nonce" : "0x00", "storage" : { "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360075660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_jumpdest2.json ================================================ { "jump0_jumpdest2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_jumpdest2Filler.json", "sourceHash" : "3aba479e0b0de29b2fac29ac62deb3e37d9fff0a79ed3a1953a7afa7e19b17da" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6023600a6008505660015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013869", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a6008505660015b600255", "nonce" : "0x00", "storage" : { "0x02" : "0x23" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6023600a6008505660015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_outOfBoundary.json ================================================ { "jump0_outOfBoundary" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_outOfBoundaryFiller.json", "sourceHash" : "9442ba4b2e4625b3ba5d7a3c43a5c1bcbb0f71fb8977d9cb291a58f956e5d014" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236007566001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236007566001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump0_withoutJumpdest.json ================================================ { "jump0_withoutJumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump0_withoutJumpdestFiller.json", "sourceHash" : "4023b9b32fabb7baeb154e319422cc24e852c858eb124713508a241df86f3969" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236007566001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236007566001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jump1.json ================================================ { "jump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jump1Filler.json", "sourceHash" : "c86900065dc3ca2743c247f2c7f305795833184ab64acf0c6911a899533ab628" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x620fffff620fffff0156", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x620fffff620fffff0156", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpAfterStop.json ================================================ { "jumpAfterStop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpAfterStopFiller.json", "sourceHash" : "1527b83fd9a930436902b171302c40812a33a035bf148e5c40f362e811b1ad54" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6006560060015b6002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6006560060015b6002600355", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6006560060015b6002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpDynamicJumpSameDest.json ================================================ { "jumpDynamicJumpSameDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpDynamicJumpSameDestFiller.json", "sourceHash" : "c1d46387eefa48a995ad56844ced0803c7e2441369d569c7669933b1ebecc2c8" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600401565b600360005260206000f3600656", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01867c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000003", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600401565b600360005260206000f3600656", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600401565b600360005260206000f3600656", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpHigh.json ================================================ { "jumpHigh" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpHighFiller.json", "sourceHash" : "a7725bef6c1ff691ae5ad3b73c3b44a6d16f9c9b1c0e57671d7ff59fe9ac9800" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x630fffffff565b5b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x630fffffff565b5b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpInsidePushWithJumpDest.json ================================================ { "jumpInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpInsidePushWithJumpDestFiller.json", "sourceHash" : "d200f4e72a16a6960609912d97797b467afb3a98c1eef6f9eed2006c4111a7f3" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600456655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600456655b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpInsidePushWithoutJumpDest.json ================================================ { "jumpInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpInsidePushWithoutJumpDestFiller.json", "sourceHash" : "451d199b9c77c3a3297bb20ba2a01c238e984283e3690b22c9614121c878d8ec" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60055661eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60055661eeff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpOntoJump.json ================================================ { "jumpOntoJump" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpOntoJumpFiller.json", "sourceHash" : "b7af74ccb70e4242810a2f47181f0c95ee1b9558385cff3a33896f29c7775d7e" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x565b600056", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x565b600056", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpTo1InstructionafterJump.json ================================================ { "jumpTo1InstructionafterJump" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpTo1InstructionafterJumpFiller.json", "sourceHash" : "88eb8cc46a28df3e813fc9d859aaa7c10bd7246272ed7af7c7e119e18e7c6592" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6003565b6001600055", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x6003565b6001600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_jumpdestFirstInstruction.json ================================================ { "jumpTo1InstructionafterJump_jumpdestFirstInstruction" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpTo1InstructionafterJump_jumpdestFirstInstructionFiller.json", "sourceHash" : "1e05b7560aba357248c8fdddd62e9b8dfb943cc2c3bb9569c5d44c2322899ff4" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5b6003565b6001600055", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x5b6003565b6001600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_noJumpDest.json ================================================ { "jumpTo1InstructionafterJump_noJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpTo1InstructionafterJump_noJumpDestFiller.json", "sourceHash" : "91502d2804896fda92630c93005fc5c0e26591bac75b7fff576409271f81cdb6" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6003566001600055", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x6003566001600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpToUint64maxPlus1.json ================================================ { "jumpToUint64maxPlus1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpToUint64maxPlus1Filler.json", "sourceHash" : "17b7f86769171233d32af7b23fc33ba8e71f03a64f0625aadfe65a696dff36a6" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6801000000000000000b565b5b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6801000000000000000b565b5b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpToUintmaxPlus1.json ================================================ { "jumpToUintmaxPlus1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpToUintmaxPlus1Filler.json", "sourceHash" : "6897e3a469257a7905bf719e9ae36ac49f830eab122209a9c2e89c879cdaa2d7" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x640100000007565b5b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x640100000007565b5b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpdestBigList.json ================================================ { "jumpdestBigList" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpdestBigListFiller.json", "sourceHash" : "6e4f2dfe68bb0ae1bdce8e6385b098b9984176b12f76273d1a1f7e34f46d85db" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6009565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b", "data" : "0x", "gas" : "0x05f5e100", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x05f5e0a1", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6009565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6009565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpi0.json ================================================ { "jumpi0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpi0Filler.json", "sourceHash" : "86fb0cc0becb3234b287df55e90da9a860eff30714976e3395b25ee2e2b47c48" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360016009576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360016009576001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpi1.json ================================================ { "jumpi1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpi1Filler.json", "sourceHash" : "27f04b183d459deb05bc15b1281b0e300307950da1968f669bd8cbec2b200044" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x602360006009576001600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013867", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360006009576001600255", "nonce" : "0x00", "storage" : { "0x02" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x602360006009576001600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpi1_jumpdest.json ================================================ { "jumpi1_jumpdest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpi1_jumpdestFiller.json", "sourceHash" : "ad83573b03f45ffbef8bfcea78a8cb61b1c793b36475000cf9222dea41696717" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60236001600a5760015b600255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60236001600a5760015b600255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpiAfterStop.json ================================================ { "jumpiAfterStop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpiAfterStopFiller.json", "sourceHash" : "ec2d355d1d27a71fadd654c9a7b8a7b90bc68dce10416448f803d452ef1d474d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016008570060015b6002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013869", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016008570060015b6002600355", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016008570060015b6002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpiOutsideBoundary.json ================================================ { "jumpiOutsideBoundary" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpiOutsideBoundaryFiller.json", "sourceHash" : "7d536d76f1c00c063b374bdcd155229427e5fe4867ae5ac41d42516c88ebff0d" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff576002600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff576002600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpiToUint64maxPlus1.json ================================================ { "jumpiToUint64maxPlus1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpiToUint64maxPlus1Filler.json", "sourceHash" : "43b7965f24cac2b1b88fb4781bccd2cbcdcc1569812c2c9e28ebded71ebd172e" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016801000000000000000d575b5b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60016801000000000000000d575b5b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpiToUintmaxPlus1.json ================================================ { "jumpiToUintmaxPlus1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpiToUintmaxPlus1Filler.json", "sourceHash" : "58d51b8cb46082033f726f1bca929fb1713048436d52029e31f5bfcaaaded691" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001640100000009575b5b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001640100000009575b5b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpi_at_the_end.json ================================================ { "jumpi_at_the_end" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpi_at_the_endFiller.json", "sourceHash" : "db58f5762f6dccaf9a4daa5053fe18bc36fc597c379acbbb8dc7d41897e0fd1b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a6000525b6000516001900380600052600557", "data" : "0x", "gas" : "0x03e8", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x0260", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a6000525b6000516001900380600052600557", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a6000525b6000516001900380600052600557", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpifInsidePushWithJumpDest.json ================================================ { "jumpifInsidePushWithJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpifInsidePushWithJumpDestFiller.json", "sourceHash" : "790a546e29160af651f091890cd367d79d28b345f43847fa5d19b6a0dab087e9" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001600657655b6001600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001600657655b6001600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/jumpifInsidePushWithoutJumpDest.json ================================================ { "jumpifInsidePushWithoutJumpDest" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/jumpifInsidePushWithoutJumpDestFiller.json", "sourceHash" : "c69048c65f19388408ec0027e2c9372b393d057d91c9e0eff2ea96f8bb59f66b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600160075761eeff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600160075761eeff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/kv1.json ================================================ { "kv1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/kv1Filler.json", "sourceHash" : "e9c18f1395a9a5e541d26c02b68f69e413953c380102c17d783cc18b5092bbf2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x33604555602d80600f6000396000f3604554331415602c575b366080511015602b576020608051013560805135556040608051016080526009565b5b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x604554331415602c575b366080511015602b576020608051013560805135556040608051016080526009565b5b", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x33604555602d80600f6000396000f3604554331415602c575b366080511015602b576020608051013560805135556040608051016080526009565b5b", "nonce" : "0x00", "storage" : { "0x45" : "0xcd1722f3947def4cf144679da39c4c32bdc35681" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x33604555602d80600f6000396000f3604554331415602c575b366080511015602b576020608051013560805135556040608051016080526009565b5b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/log1MemExp.json ================================================ { "log1MemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/log1MemExpFiller.json", "sourceHash" : "241dbcb0d33d25f1db0b51b65c38c4e3ef2f5b52c799264979423508e3fcf934" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60ff630fffffffa1", "data" : "0x", "gas" : "0x01f4153d80", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60ff630fffffffa1", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/loop_stacklimit_1020.json ================================================ { "loop_stacklimit_1020" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/loop_stacklimit_1020Filler.json", "sourceHash" : "e3a67d3fc9f35b9e0db39be074d9160030b23790e568d0387f9d8f7e4190e40a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000345b60019003906001018180600357600052600152600059f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x03fc" }, "gas" : "0xef1c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000345b60019003906001018180600357600052600152600059f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000345b60019003906001018180600357600052600152600059f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/loop_stacklimit_1021.json ================================================ { "loop_stacklimit_1021" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/loop_stacklimit_1021Filler.json", "sourceHash" : "c1bb4f6ff68cafca82606ffe4fbed88358dc3b19be5e69714e96478d8571c0fc" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000345b60019003906001018180600357600052600152600059f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x03fd" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000345b60019003906001018180600357600052600152600059f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/memory1.json ================================================ { "memory1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/memory1Filler.json", "sourceHash" : "4962a1d10a8792cd1ad8a08ac500002adec8cc965fd1fb4d1c45cb3e558a9de6" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600260005360036001536000516001510160025260406000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01866d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x02030503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600260005360036001536000516001510160025260406000f3", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600260005360036001536000516001510160025260406000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mloadError0.json ================================================ { "mloadError0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mloadError0Filler.json", "sourceHash" : "27a14368a9e5b964986445d0436e67f685ab0171ea0359b9a112fdc07d98bf53" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600051600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01730c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600051600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600051600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mloadError1.json ================================================ { "mloadError1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mloadError1Filler.json", "sourceHash" : "f5841cfbab0e35ad5727493bc7b6e0cd075735640637e817001de707085c2608" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6017600152600051600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017300", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6017600152600051600155", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6017600152600051600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mloadMemExp.json ================================================ { "mloadMemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mloadMemExpFiller.json", "sourceHash" : "b12ca5b81a2d597d774f63fd3e6301a3808c7090e1b5ee00ea980c846ddadf32" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x630fffffff51", "data" : "0x", "gas" : "0x800570", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x630fffffff51", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mloadOutOfGasError2.json ================================================ { "mloadOutOfGasError2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mloadOutOfGasError2Filler.json", "sourceHash" : "8df8c3070849692634e4e7af44885da9c5d41df0717fd6d337aa7d5bfed56d52" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6272482551600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6272482551600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/msize0.json ================================================ { "msize0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/msize0Filler.json", "sourceHash" : "41daa7a08f4c4f0380b60446927c8a3d3f077fdd63de63ab8736353cf7c92d86" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60005259600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005259600055", "nonce" : "0x00", "storage" : { "0x00" : "0x20" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005259600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/msize1.json ================================================ { "msize1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/msize1Filler.json", "sourceHash" : "1bc7a7187b3aa498df95faec7fa0258d950df3afb6205db0f9e2997ffb7ec512" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x64ffffffffff60005259600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005259600055", "nonce" : "0x00", "storage" : { "0x00" : "0x20" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005259600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/msize2.json ================================================ { "msize2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/msize2Filler.json", "sourceHash" : "7a68500c2697ce7d4e5140214c087b3f152770295239abebdae1f81695167994" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x64ffffffffff60005261eeee60205259600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013863", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005261eeee60205259600055", "nonce" : "0x00", "storage" : { "0x00" : "0x40" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005261eeee60205259600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/msize3.json ================================================ { "msize3" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/msize3Filler.json", "sourceHash" : "e5a676b6ba865c05ea6cf933a2805cb286a664d1bee6544604cc96fdd79f1be4" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x64ffffffffff60005261eeee605a5259600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005261eeee605a5259600055", "nonce" : "0x00", "storage" : { "0x00" : "0x80" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64ffffffffff60005261eeee605a5259600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore0.json ================================================ { "mstore0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore0Filler.json", "sourceHash" : "78e3311be5943f4a7995e11b3fe7e41fa432fae150d687201c617c70ae40f6d7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155", "nonce" : "0x00", "storage" : { "0x01" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore1.json ================================================ { "mstore1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore1Filler.json", "sourceHash" : "424433d76d1f8d1622fa9796c232dbd9f31ddc1231efae876f6494ee7d1ccab2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600201600152600151600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013862", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600201600152600151600155", "nonce" : "0x00", "storage" : { "0x01" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600201600152600151600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore8MemExp.json ================================================ { "mstore8MemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore8MemExpFiller.json", "sourceHash" : "df32f3b06a7e748f5fdd93a878f7687f4f28864f8a5956d8e3a4fff7463b47f0" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60f1630fffffff53", "data" : "0x", "gas" : "0x800570", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60f1630fffffff53", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore8WordToBigError.json ================================================ { "mstore8WordToBigError" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore8WordToBigErrorFiller.json", "sourceHash" : "e7f6dfe7bcd73d4ee7ec71238711bd20d21eafc11b4b5e6c54ed69b2daf3c8bd" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155", "nonce" : "0x00", "storage" : { "0x01" : "0xff00000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore8_0.json ================================================ { "mstore8_0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore8_0Filler.json", "sourceHash" : "0a5e67d6603b41a69f94c4d3dcc06da69c17c841ba0cdc8e15a5203e89d217a7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155", "nonce" : "0x00", "storage" : { "0x01" : "0xff00000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore8_1.json ================================================ { "mstore8_1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore8_1Filler.json", "sourceHash" : "85ba59a62f13c9f29b37207e79bf61c2bfb361b6b703ac5ec0f82801edd6cdec" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60015360ee600253600051600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013862", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60015360ee600253600051600155", "nonce" : "0x00", "storage" : { "0x01" : "0xffee0000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60015360ee600253600051600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstoreMemExp.json ================================================ { "mstoreMemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstoreMemExpFiller.json", "sourceHash" : "eb43769a562c8a34bcb776fd312cc723bf2e8f4e64c75d7d3e36451760d9fd44" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60f1630fffffff52", "data" : "0x", "gas" : "0x01f4153d80", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60f1630fffffff52", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstoreWordToBigError.json ================================================ { "mstoreWordToBigError" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstoreWordToBigErrorFiller.json", "sourceHash" : "25c31b75a7912e1384ff3347dc511c5d1b384e6f40cfb0dffaa65176abcc1613" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155", "nonce" : "0x00", "storage" : { "0x01" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/mstore_mload0.json ================================================ { "mstore_mload0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/mstore_mload0Filler.json", "sourceHash" : "f3bd75c796896dcdbf77a7b2af45f3299ebe20db7e30d22031edc990bffb0416" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6017600052600051600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6017600052600051600155", "nonce" : "0x00", "storage" : { "0x01" : "0x17" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6017600052600051600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/pc0.json ================================================ { "pc0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/pc0Filler.json", "sourceHash" : "824c240179768ed6999ca7357c185b25d2368e5526cde066fa103caa26fe8dea" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x58600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x017313", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x58600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x58600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/pc1.json ================================================ { "pc1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/pc1Filler.json", "sourceHash" : "5e897dc9ac93e7c8c0502f846914c81cacb26796ab75d517dd862fc1f193256c" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60005558600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x0124ed", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005558600055", "nonce" : "0x00", "storage" : { "0x00" : "0x05" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005558600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/pop0.json ================================================ { "pop0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/pop0Filler.json", "sourceHash" : "46af5c256e1cdc6525f63332c78c39e0583ad9afe06e29a1a2cad8efcc801fd4" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600360045055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013875", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600360045055", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600360045055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/pop1.json ================================================ { "pop1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/pop1Filler.json", "sourceHash" : "f87d71b88a272f122f6ea9dbd4680f8b4bf659a1b2bae4634398e6ecdcc9f487" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x5060026003600455", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x5060026003600455", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/return1.json ================================================ { "return1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/return1Filler.json", "sourceHash" : "fe0798e0775da11e784482b44b51322ad70f4deaa8ce8643841257d3abee2e1f" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001620f4240f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001620f4240f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/return2.json ================================================ { "return2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/return2Filler.json", "sourceHash" : "dbf688e0c2f5f4907b91cf9d71f3dc94ccbdcd3153ece4d2017e0367c0f0ef66" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6001608052600060805111601b57600160005260206000f3602b565b602760005260206000f360026080525b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01865f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000027", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001608052600060805111601b57600160005260206000f3602b565b602760005260206000f360026080525b", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6001608052600060805111601b57600160005260206000f3602b565b602760005260206000f360026080525b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/sha3MemExp.json ================================================ { "sha3MemExp" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/sha3MemExpFiller.json", "sourceHash" : "6672d6b321654fc8397f1a89903d0fb859013f50a4483c33e7b14b08ba490886" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x01f4153d80", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff630fffffff20", "data" : "0x", "gas" : "0x01f4153d80", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff630fffffff20", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/sstore_load_0.json ================================================ { "sstore_load_0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/sstore_load_0Filler.json", "sourceHash" : "371f51e169fa8f7740cef83f469ff5f02034d301d027b0267cd999c9ea5ca633" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60005560ee600a55600054601455", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x9bfc", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005560ee600a55600054601455", "nonce" : "0x00", "storage" : { "0x00" : "0xff", "0x0a" : "0xee", "0x14" : "0xff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005560ee600a55600054601455", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/sstore_load_1.json ================================================ { "sstore_load_1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/sstore_load_1Filler.json", "sourceHash" : "28c5c7cfbcf28dd967743a82487d71c5d17eca75a90f019d227970c0ff927155" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60005560ee600a55606454601455", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0xd694", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005560ee600a55606454601455", "nonce" : "0x00", "storage" : { "0x00" : "0xff", "0x0a" : "0xee" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005560ee600a55606454601455", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/sstore_load_2.json ================================================ { "sstore_load_2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/sstore_load_2Filler.json", "sourceHash" : "6eeaf23d94ef3fc20edf8997eea5636ef20031039916c445404cfbe6ed8fbd42" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff60005560ee60015560dd600255600154600a55600254601455", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff60005560ee60015560dd600255600154600a55600254601455", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/sstore_underflow.json ================================================ { "sstore_underflow" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/sstore_underflowFiller.json", "sourceHash" : "805b307827e4870e9e3bf9655a71a4ca5c327223280c4c3125522d053732de4b" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/stack_loop.json ================================================ { "stack_loop" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/stack_loopFiller.json", "sourceHash" : "10cdba5fde4ef3d4d21af05732cf685986623a9055ef0d62dfb00f2a415e9264" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60015b6001810380600257600053600153600253600353600453600553600653600753600853600953596000f3", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60015b6001810380600257600053600153600253600353600453600553600653600753600853600953596000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/stackjump1.json ================================================ { "stackjump1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/stackjump1Filler.json", "sourceHash" : "21d7234c731f6e2e771b45ce8ba46f258fcfee3c1c1f9060d5246302ef5f151e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6004600660096014565b600a03600052596000f35b60005201600956", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x018662", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x0000000000000000000000000000000000000000000000000000000000000000", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6004600660096014565b600a03600052596000f35b60005201600956", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6004600660096014565b600a03600052596000f35b60005201600956", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/swapAt52becameMstore.json ================================================ { "swapAt52becameMstore" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/swapAt52becameMstoreFiller.json", "sourceHash" : "b014aac7021775f56b763921bf12a663ca35c4aa230888cd7908edfa705b1413" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600260035255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600260035255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmIOandFlowOperations/when.json ================================================ { "when" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmIOandFlowOperations/whenFiller.json", "sourceHash" : "18527242394f1a6921ffb94f5938e5c13a8dc892cb123edf424d17c32be5140d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600060011115600e57600d6080525b", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01866e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600060011115600e57600d6080525b", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600060011115600e57600d6080525b", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup1.json ================================================ { "dup1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup1Filler.json", "sourceHash" : "889d5de15fe358e75ea0112d96f91b7f0611e50107afd44e49591dfdf4d1404a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff80600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013877", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff80600355", "nonce" : "0x00", "storage" : { "0x03" : "0x10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff80600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup10.json ================================================ { "dup10" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup10Filler.json", "sourceHash" : "23bdbc11963ca2b25f37833790df2c18f7e8eafb140aeae46da7aa559b155c08" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a60096008600760066005600460036002600189600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a60096008600760066005600460036002600189600355", "nonce" : "0x00", "storage" : { "0x03" : "0x0a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a60096008600760066005600460036002600189600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup11.json ================================================ { "dup11" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup11Filler.json", "sourceHash" : "19bd1559d38698b81939d34f57fd6d0cc67f859abd68cef0aa92d5bfab4988a9" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600b600a6009600860076006600560046003600260018a600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013859", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600b600a6009600860076006600560046003600260018a600355", "nonce" : "0x00", "storage" : { "0x03" : "0x0b" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600b600a6009600860076006600560046003600260018a600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup12.json ================================================ { "dup12" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup12Filler.json", "sourceHash" : "da44468576186e257a5702a707b1473294a2462f0f658a766844ecb54a3695aa" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600c600b600a6009600860076006600560046003600260018b600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013856", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600c600b600a6009600860076006600560046003600260018b600355", "nonce" : "0x00", "storage" : { "0x03" : "0x0c" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600c600b600a6009600860076006600560046003600260018b600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup13.json ================================================ { "dup13" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup13Filler.json", "sourceHash" : "f3c75ee821b71e2914b48355154b77941be4b3b5a181dea5233d79b3bf40fcc1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600d600c600b600a6009600860076006600560046003600260018c600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013853", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600d600c600b600a6009600860076006600560046003600260018c600355", "nonce" : "0x00", "storage" : { "0x03" : "0x0d" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600d600c600b600a6009600860076006600560046003600260018c600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup14.json ================================================ { "dup14" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup14Filler.json", "sourceHash" : "a37f4ccb2c77bb918267d494a88dcb88531ea34447b2d16aff8f4ae3860182f3" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600e600d600c600b600a6009600860076006600560046003600260018d600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013850", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600e600d600c600b600a6009600860076006600560046003600260018d600355", "nonce" : "0x00", "storage" : { "0x03" : "0x0e" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600e600d600c600b600a6009600860076006600560046003600260018d600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup15.json ================================================ { "dup15" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup15Filler.json", "sourceHash" : "0ac65194062a3e7bc2459472d9c4864695ec91177b5344a134c2da8ed44b0369" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600f600e600d600c600b600a6009600860076006600560046003600260018e600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01384d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600f600e600d600c600b600a6009600860076006600560046003600260018e600355", "nonce" : "0x00", "storage" : { "0x03" : "0x0f" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600f600e600d600c600b600a6009600860076006600560046003600260018e600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup16.json ================================================ { "dup16" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup16Filler.json", "sourceHash" : "2b4c0d14cb78c59f0ab214cc935fe94741426dbd20418c1c06dd063ea0caa2d5" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6010600f600e600d600c600b600a6009600860076006600560046003600260018f600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01384a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6010600f600e600d600c600b600a6009600860076006600560046003600260018f600355", "nonce" : "0x00", "storage" : { "0x03" : "0x10" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6010600f600e600d600c600b600a6009600860076006600560046003600260018f600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup2.json ================================================ { "dup2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup2Filler.json", "sourceHash" : "12b1431dcf55f1141d0e407117f92914fa9a25ae5485ad89e06bef6b688b1a94" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600181600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600181600355", "nonce" : "0x00", "storage" : { "0x03" : "0x02" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600181600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup2error.json ================================================ { "dup2error" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup2errorFiller.json", "sourceHash" : "39d43572d1117048ea0ef48812b09faca67b3978451dd4da80d2df3d758fb102" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff81600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff81600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup3.json ================================================ { "dup3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup3Filler.json", "sourceHash" : "09c9fbeef4cef9883c23f3444738ad2b4751e00b5753aa9c1b9f224ae365a53f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60036002600182600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013871", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60036002600182600355", "nonce" : "0x00", "storage" : { "0x03" : "0x03" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60036002600182600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup4.json ================================================ { "dup4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup4Filler.json", "sourceHash" : "acb8190d34fe9b884acd7d69397e6434d2fd07227d7e6736eb6ae7f5bb172401" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600460036002600183600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460036002600183600355", "nonce" : "0x00", "storage" : { "0x03" : "0x04" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460036002600183600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup5.json ================================================ { "dup5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup5Filler.json", "sourceHash" : "4fcfefb995a2ebbd90e18181ff5939c6db3e630bda508f94cc1a55fb7b8b43bc" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6005600460036002600184600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600460036002600184600355", "nonce" : "0x00", "storage" : { "0x03" : "0x05" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600460036002600184600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup6.json ================================================ { "dup6" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup6Filler.json", "sourceHash" : "9cc5d01fd36294ca6f658eb77a10d597d30ef8b6ed1b9cee39719fcaf639b757" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60066005600460036002600185600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60066005600460036002600185600355", "nonce" : "0x00", "storage" : { "0x03" : "0x06" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60066005600460036002600185600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup7.json ================================================ { "dup7" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup7Filler.json", "sourceHash" : "28fe0e04a338072067f4bd7ea8c75f1dd010613fb5255ca54411fa8c3e215476" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600760066005600460036002600186600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013865", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600760066005600460036002600186600355", "nonce" : "0x00", "storage" : { "0x03" : "0x07" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600760066005600460036002600186600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup8.json ================================================ { "dup8" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup8Filler.json", "sourceHash" : "0fcca677e0e2f103dd67ab566f8d0382403fb41f1cec87c741d57199163bc819" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6008600760066005600460036002600187600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013862", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6008600760066005600460036002600187600355", "nonce" : "0x00", "storage" : { "0x03" : "0x08" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6008600760066005600460036002600187600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/dup9.json ================================================ { "dup9" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/dup9Filler.json", "sourceHash" : "f5af3ef5323e2e3792ba1f470a26ed99975e436cf47ef414f28cb8fc510ca1a7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60096008600760066005600460036002600188600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60096008600760066005600460036002600188600355", "nonce" : "0x00", "storage" : { "0x03" : "0x09" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60096008600760066005600460036002600188600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push1.json ================================================ { "push1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push1Filler.json", "sourceHash" : "8171c34388587f0c7ae7a41b825eef42d10738f6fb953c11c1d6ef9c2a6f5129" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60ff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60ff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push10.json ================================================ { "push10" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push10Filler.json", "sourceHash" : "0d3011bde292b2ca6a6266ba693e55e0edbe5682bc20216e970fcb3d2fe881c3" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6966778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6966778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x66778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6966778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push11.json ================================================ { "push11" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push11Filler.json", "sourceHash" : "c18904bda959ad278ce35ec57ba4b78a539f35bc14f843ac9774c9f0004f59ce" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6a5566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6a5566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x5566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6a5566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push12.json ================================================ { "push12" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push12Filler.json", "sourceHash" : "60fa6626a3b28b48318b49eb9fdf256c6a25d9dac4959b9bea89a98050c4469a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6b445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6b445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6b445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push13.json ================================================ { "push13" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push13Filler.json", "sourceHash" : "343d540d55a46e9f3857c7a0919a69108c7924b9c690db204c2868d5ae50a460" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6c33445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6c33445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x33445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6c33445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push14.json ================================================ { "push14" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push14Filler.json", "sourceHash" : "0ba241772c95e7ce39b9cc1dc5ea2d2f7ee75a96ce82bd17bfea425ca32a4d4a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6d2233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6d2233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x2233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6d2233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push15.json ================================================ { "push15" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push15Filler.json", "sourceHash" : "29617368ed760520f7807ed629abe751dada5a3e9fc72602b50ed1f48278ce52" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6e112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6e112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6e112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push16.json ================================================ { "push16" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push16Filler.json", "sourceHash" : "5c54e00d05640819402aa7120a2b9d12ff42edd5a049b32adaf44e768fe9efc2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6f10112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6f10112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x10112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6f10112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push17.json ================================================ { "push17" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push17Filler.json", "sourceHash" : "0b82cf50a2dd3f921f0316cd2be4749ad1c7b7804a7057743103317674fc1c80" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x70ff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x70ff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x70ff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push18.json ================================================ { "push18" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push18Filler.json", "sourceHash" : "80e81d41694d284faac2ade3e819de6103aa03a169166fa8d8c5e43944b7ad50" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x71eeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x71eeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x71eeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push19.json ================================================ { "push19" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push19Filler.json", "sourceHash" : "395bb54c39e164688f3a8706e288302b4aa1ce898faf9af85298651b815c78d5" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x72ddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x72ddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x72ddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push1_missingStack.json ================================================ { "push1_missingStack" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push1_missingStackFiller.json", "sourceHash" : "8648b58b98abaa9416a15974256a81f45ab7d3692b5798c30dae0bd377ffd5c0" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01869d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push2.json ================================================ { "push2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push2Filler.json", "sourceHash" : "da86ae7ca1372a231b1c1fd8f060e3e993e00448951af08348ca65fa11aab298" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x61eeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x61eeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x61eeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push20.json ================================================ { "push20" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push20Filler.json", "sourceHash" : "c3f370223d38ff6230aad16a24a32a2c02622d8f6f32a6cef36f37ff3efd5f3e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x73ccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x73ccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x73ccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push21.json ================================================ { "push21" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push21Filler.json", "sourceHash" : "0abf08a8156e9009d9000e3cd4ff34a0a59f752cf83398435e375b8cac971ece" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x74bbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x74bbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xbbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x74bbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push22.json ================================================ { "push22" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push22Filler.json", "sourceHash" : "e4086c43a883aba2edaa929e238d346bdfbb26807ec8cbc846584b2b9efe3015" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x75aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x75aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xaabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x75aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push23.json ================================================ { "push23" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push23Filler.json", "sourceHash" : "c9c1a082ed275dceb0b1d5e66dc9e02bf983c8066aa2f703409131550ce818f3" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7699aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7699aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x99aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7699aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push24.json ================================================ { "push24" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push24Filler.json", "sourceHash" : "5b4d98c3f4c67c360b2aae0d300c947470dafa9ce2545891725387310fe0c2b6" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x8899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push25.json ================================================ { "push25" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push25Filler.json", "sourceHash" : "78b2fb30a16bb58147d99ef1f6fdba16fe5f403cb52aea760eb6d5a813f478cb" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x78778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x78778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x78778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push26.json ================================================ { "push26" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push26Filler.json", "sourceHash" : "b29629f6a45374bd27c145ad45c4e9dd63aee283f706bf35ccb98cb57d8f4615" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7966778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7966778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x66778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7966778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push27.json ================================================ { "push27" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push27Filler.json", "sourceHash" : "33e85a89072e1d3b1b84e66fbe5b42a77509d046a6edb8a75e66caf16d7b8c8a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7a5566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7a5566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x5566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7a5566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push28.json ================================================ { "push28" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push28Filler.json", "sourceHash" : "e5ce3ec9a80d778187ca40662e6c4b406a70bb9dcf472f807f270b163c31be50" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7b445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7b445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x445566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7b445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push29.json ================================================ { "push29" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push29Filler.json", "sourceHash" : "1ef57214acc4761163e6aebfecd7934a10f2c37e7ad0f0ffcec4896c11986861" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7c33445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7c33445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x33445566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7c33445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push3.json ================================================ { "push3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push3Filler.json", "sourceHash" : "20a168ac86bdd2d3db0921329d4f82421261f0b9d91342d49f079cdc4f07b519" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x62ddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x62ddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x62ddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push30.json ================================================ { "push30" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push30Filler.json", "sourceHash" : "a50547b1b97d5b147e6ff053f126c0741759f6f8f2f8e242d4b97068923f0b1e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7d2233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7d2233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x2233445566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7d2233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push31.json ================================================ { "push31" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push31Filler.json", "sourceHash" : "2200ea0b0c9cd7781b9647a0082848bc70691fadb5bbc0e6286c39b83191e4fe" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7e112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7e112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7e112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push32.json ================================================ { "push32" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push32Filler.json", "sourceHash" : "c43c12c1b4e0a444bf3811410b4d0f830096d44fda3c08a4d62337a585505b81" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push32AndSuicide.json ================================================ { "push32AndSuicide" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push32AndSuicideFiller.json", "sourceHash" : "af183885a76f539a582fdea8b5e208af8bb8a7eeee650fc577c7bbe08e7dd573" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01869d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0xbbccddeeff00112233445566778899aabbccddee" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push32FillUpInputWithZerosAtTheEnd.json ================================================ { "push32FillUpInputWithZerosAtTheEnd" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push32FillUpInputWithZerosAtTheEndFiller.json", "sourceHash" : "d9030acc29449af0afca2ae316049618bd5341cbb9199229cf7d32d1e8a69cae" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01869d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push32Undefined.json ================================================ { "push32Undefined" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push32UndefinedFiller.json", "sourceHash" : "4785045efbe6fd8cda777fbefd472c6a59f5ff2e9ec58857da3630eba0301880" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f010203600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01869d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f010203600055", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f010203600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push32Undefined2.json ================================================ { "push32Undefined2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push32Undefined2Filler.json", "sourceHash" : "82f94221f2d543097751ecc6b8a89b5b52041ebd868d2059bf7e684eed45e4f2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f0102030000000000000000000000000000000000000000000000000000000000600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f0102030000000000000000000000000000000000000000000000000000000000600055", "nonce" : "0x00", "storage" : { "0x00" : "0x0102030000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f0102030000000000000000000000000000000000000000000000000000000000600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push32Undefined3.json ================================================ { "push32Undefined3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push32Undefined3Filler.json", "sourceHash" : "530f8de32e0ad870380534ff33c3ca7b86401391b64d1c33affa28021a531233" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01869d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push33.json ================================================ { "push33" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push33Filler.json", "sourceHash" : "ea8cc586ff9dfaac550e6e2709d2ab87f36589938fb684462db713390b9e57eb" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60656107d26204a0c763026921f4640bc5588eb165372d0f1dca6e661ba1d901961c71670c55f7bc23038e3868056bc75e2d630fffff69021e19e0c9bab24000016a085d1c6e8050f0ea1c71bd6b0688be36543f3c36e638e37a6c03d41f73d55d0d482ae55555376dc76810d0fe03c91964d31c71c6f46e615dd0360c07d931663b14e38e38b16f2da3f99955a3adcf27ebb1caaaaaaa6e7014ccba6a8bb1ed35bd86bf065c71c71c2b7109491c5d4781b79c9009de6bfb8e38e38de8720414a0f6fdec81304d4c563e740bffffffffa573118427b3b4a05bc8a8a4de8459868000000000017406eb15e7331e727940d4ac54b7cdca1c71c71c71bd750567a91c9fefc96ebaa626a22f98c5e638e38e38e37a76032abd16c5b68006e15d5aa307e383f4e55555555555377701a6427bdc4f0d58eab5f48a3ec67f64e21c71c71c71c6f478080dd0a0c9b9ff2c2a0c740b06853a0a980ee38e38e38e38b17903c679cb5e8f2f9cb3b5d6652b0e7334f746faaaaaaaaaaaaa6e7a01b873815917ebb2bf3b890a1af495d6235bae3c71c71c71c71c2b7b07ae4cca96e1a55dfa49c85ad3c3e60e426b92fb8e38e38e38e38de87c036018bf074e292bcc7d6c8bea0f9699443046178bffffffffffffffa57d0e7d34c64a9c85d4460dbbca87196b61618a4bd2168000000000000000017e05b901f48a5b994d6572502bc4ea43140486666416aa1c71c71c71c71c71bd7f047889870c178fc477414ea231d70467a388fffe31b4e638e38e38e38e38e37a", "data" : "0x", "gas" : "0x20", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60656107d26204a0c763026921f4640bc5588eb165372d0f1dca6e661ba1d901961c71670c55f7bc23038e3868056bc75e2d630fffff69021e19e0c9bab24000016a085d1c6e8050f0ea1c71bd6b0688be36543f3c36e638e37a6c03d41f73d55d0d482ae55555376dc76810d0fe03c91964d31c71c6f46e615dd0360c07d931663b14e38e38b16f2da3f99955a3adcf27ebb1caaaaaaa6e7014ccba6a8bb1ed35bd86bf065c71c71c2b7109491c5d4781b79c9009de6bfb8e38e38de8720414a0f6fdec81304d4c563e740bffffffffa573118427b3b4a05bc8a8a4de8459868000000000017406eb15e7331e727940d4ac54b7cdca1c71c71c71bd750567a91c9fefc96ebaa626a22f98c5e638e38e38e37a76032abd16c5b68006e15d5aa307e383f4e55555555555377701a6427bdc4f0d58eab5f48a3ec67f64e21c71c71c71c6f478080dd0a0c9b9ff2c2a0c740b06853a0a980ee38e38e38e38b17903c679cb5e8f2f9cb3b5d6652b0e7334f746faaaaaaaaaaaaa6e7a01b873815917ebb2bf3b890a1af495d6235bae3c71c71c71c71c2b7b07ae4cca96e1a55dfa49c85ad3c3e60e426b92fb8e38e38e38e38de87c036018bf074e292bcc7d6c8bea0f9699443046178bffffffffffffffa57d0e7d34c64a9c85d4460dbbca87196b61618a4bd2168000000000000000017e05b901f48a5b994d6572502bc4ea43140486666416aa1c71c71c71c71c71bd7f047889870c178fc477414ea231d70467a388fffe31b4e638e38e38e38e38e37a", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push4.json ================================================ { "push4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push4Filler.json", "sourceHash" : "5a3832a8b7f6e3a6c995c246489601cebfde0a3b04378909ded6427608cf6f75" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x63ccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x63ccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x63ccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push5.json ================================================ { "push5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push5Filler.json", "sourceHash" : "f2293a566cf50f05c0e44a6026d1cdb43b252f6a2ebbab995fcf5370e7950419" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x64bbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64bbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xbbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x64bbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push6.json ================================================ { "push6" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push6Filler.json", "sourceHash" : "ce3dba7bfdc96d65e81e5861ce747a9ea16ca2ea702f770ef4e1ca8be634dc46" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x65aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x65aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0xaabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x65aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push7.json ================================================ { "push7" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push7Filler.json", "sourceHash" : "c89c898f0e46b4eeb7856bfc2e7825a94d2d30c6a564047fc46506607bf9f0b2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6699aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6699aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x99aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6699aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push8.json ================================================ { "push8" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push8Filler.json", "sourceHash" : "25eb3adbc75d5ea4259d81c0fdce4047a33407f0a09c142217699bd5cb391f61" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x678899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x678899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x8899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x678899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/push9.json ================================================ { "push9" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/push9Filler.json", "sourceHash" : "c2a9a74283bbf2502f661e2834bbde716e044893d73b382c37201ab70c98a56b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x68778899aabbccddeeff600355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01387a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x68778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { "0x03" : "0x778899aabbccddeeff" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x68778899aabbccddeeff600355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap1.json ================================================ { "swap1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap1Filler.json", "sourceHash" : "573b3b4cbf04b6f052a4578898713e320d9141607d40f043270e54e67ad5822c" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013877", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039055", "nonce" : "0x00", "storage" : { "0x10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" : "0x03" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap10.json ================================================ { "swap10" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap10Filler.json", "sourceHash" : "27210b84bae9ed1b441071ca34af233dbaf3e8b82f9fba0222775b29bd5760eb" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a60096008600760066005600460036002600160039955", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385c", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a60096008600760066005600460036002600160039955", "nonce" : "0x00", "storage" : { "0x0a" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a60096008600760066005600460036002600160039955", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap11.json ================================================ { "swap11" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap11Filler.json", "sourceHash" : "701ff096656063385777a56582f56ab24c54976934d14b7c5dd5bd7f3b85be23" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600b600a60096008600760066005600460036002600160039a55", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013859", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600b600a60096008600760066005600460036002600160039a55", "nonce" : "0x00", "storage" : { "0x0b" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600b600a60096008600760066005600460036002600160039a55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap12.json ================================================ { "swap12" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap12Filler.json", "sourceHash" : "c29bc2645f826a7aa91f3e1086bc1962d76c5cbb34ddc8e816b26a45d413d3ab" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600c600b600a60096008600760066005600460036002600160039b55", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013856", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600c600b600a60096008600760066005600460036002600160039b55", "nonce" : "0x00", "storage" : { "0x0c" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600c600b600a60096008600760066005600460036002600160039b55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap13.json ================================================ { "swap13" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap13Filler.json", "sourceHash" : "7ac35225656e1a5eeea3fdc46501a8ba14175c8736f7eda814cac12357e6cab2" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600d600c600b600a60096008600760066005600460036002600160039c55", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013853", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600d600c600b600a60096008600760066005600460036002600160039c55", "nonce" : "0x00", "storage" : { "0x0d" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600d600c600b600a60096008600760066005600460036002600160039c55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap14.json ================================================ { "swap14" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap14Filler.json", "sourceHash" : "5df386c790b19a45d07bbf67f06ecf00a9edd97883f421f84c459388c74f8add" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600e600d600c600b600a60096008600760066005600460036002600160039d55", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013850", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600e600d600c600b600a60096008600760066005600460036002600160039d55", "nonce" : "0x00", "storage" : { "0x0e" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600e600d600c600b600a60096008600760066005600460036002600160039d55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap15.json ================================================ { "swap15" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap15Filler.json", "sourceHash" : "6f6977d7e7f4b57787f5577b7d2179e8f4d3882293dcea6e868f1da471d3749f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600f600e600d600c600b600a60096008600760066005600460036002600160039e55", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01384d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600f600e600d600c600b600a60096008600760066005600460036002600160039e55", "nonce" : "0x00", "storage" : { "0x0f" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600f600e600d600c600b600a60096008600760066005600460036002600160039e55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap16.json ================================================ { "swap16" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap16Filler.json", "sourceHash" : "389d2be8dbbc4585847be9b5a678a565899d4fac6018d1f6200ed091e99ce7fd" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6010600f600e600d600c600b600a60096008600760066005600460036002600160039f55", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01384a", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6010600f600e600d600c600b600a60096008600760066005600460036002600160039f55", "nonce" : "0x00", "storage" : { "0x10" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6010600f600e600d600c600b600a60096008600760066005600460036002600160039f55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap2.json ================================================ { "swap2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap2Filler.json", "sourceHash" : "75997b5204913e930c40cdf804c1be567f528b939529e86530e8c4cf3600af18" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002600160039155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013874", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600160039155", "nonce" : "0x00", "storage" : { "0x02" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6002600160039155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap2error.json ================================================ { "swap2error" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap2errorFiller.json", "sourceHash" : "01ebb21f32f2d7dd1a2113138f594314c49fa4c7af00e0a1c333492b81921135" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039155", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039155", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap3.json ================================================ { "swap3" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap3Filler.json", "sourceHash" : "0d62cd3e39f052b9154ea37ec43cf9ba110035ffdcb4e4b0d766aea8bb2b2cb1" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60036002600160039255", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013871", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60036002600160039255", "nonce" : "0x00", "storage" : { "0x03" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60036002600160039255", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap4.json ================================================ { "swap4" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap4Filler.json", "sourceHash" : "27f78dcff6d58f67504046d267f0568c976d1e5a85ed6da2373eafa24bfbe47c" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600460036002600160039355", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460036002600160039355", "nonce" : "0x00", "storage" : { "0x04" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600460036002600160039355", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap5.json ================================================ { "swap5" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap5Filler.json", "sourceHash" : "bcb9c8c7ac639affe784b6987c77d9249326db0799e1e861ad03641d9a77cef3" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6005600460036002600160039455", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01386b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600460036002600160039455", "nonce" : "0x00", "storage" : { "0x05" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600460036002600160039455", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap6.json ================================================ { "swap6" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap6Filler.json", "sourceHash" : "1bc51662e33ac34a79297262ee86f8b8e7cab89949abf037fc22f85ee08fdada" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60066005600460036002600160039555", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013868", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60066005600460036002600160039555", "nonce" : "0x00", "storage" : { "0x06" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60066005600460036002600160039555", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap7.json ================================================ { "swap7" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap7Filler.json", "sourceHash" : "8eaa2a76ec6d47d5bf7c4b49c8c1db384fe29355ced056e1c1330b1669f27b3c" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600760066005600460036002600160039655", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013865", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600760066005600460036002600160039655", "nonce" : "0x00", "storage" : { "0x07" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600760066005600460036002600160039655", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap8.json ================================================ { "swap8" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap8Filler.json", "sourceHash" : "e7d09fcfe3e8e687d084b95524fd4ff5aedf69ee2797e33930e3e9fc45e57742" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6008600760066005600460036002600160039755", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013862", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6008600760066005600460036002600160039755", "nonce" : "0x00", "storage" : { "0x08" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6008600760066005600460036002600160039755", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swap9.json ================================================ { "swap9" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swap9Filler.json", "sourceHash" : "f63ce540948be968c775c020f379e675d4a0f2a67cd6d22dff2490bf023ae796" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60096008600760066005600460036002600160039855", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01385f", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60096008600760066005600460036002600160039855", "nonce" : "0x00", "storage" : { "0x09" : "0x01" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x60096008600760066005600460036002600160039855", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmPushDupSwapTest/swapjump1.json ================================================ { "swapjump1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.10.6+commit.6c09e32c.Linux.g++", "source" : "src/VMTestsFiller/vmPushDupSwapTest/swapjump1Filler.json", "sourceHash" : "33bdfa966236aac6be6a6a7ac64600ab63f3d6c646163f4c2f1ab1c578e0e819" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x0186a0", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmRandomTest/201503102320PYTHON.json ================================================ { "201503102320PYTHON" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmRandomTest/201503102320PYTHONFiller.json", "sourceHash" : "38aa9ba7f7836987852734619b0192d42434bd7106da17663d5fc85d81a1e6cf" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x012c", "currentTimestamp" : "0x02" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x434342444244454597", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x434342444244454597", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmRandomTest/201503110206PYTHON.json ================================================ { "201503110206PYTHON" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmRandomTest/201503110206PYTHONFiller.json", "sourceHash" : "ad34ff6291ab537633ab5e7163537b24617cc4edb2f45eac65bed9d2c009cfc3" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x012c", "currentTimestamp" : "0x02" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x4045404145454441343987ff3735043055", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x4045404145454441343987ff3735043055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmRandomTest/201503110219PYTHON.json ================================================ { "201503110219PYTHON" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmRandomTest/201503110219PYTHONFiller.json", "sourceHash" : "93dd23cbf213b07ac96a1fdfc826f41475452fea6da2e4f8d3f5d206e9a1adb9" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x012c", "currentTimestamp" : "0x02" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x4040459143404144809759886d608f", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x4040459143404144809759886d608f", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmRandomTest/201503110346PYTHON_PUSH24.json ================================================ { "201503110346PYTHON_PUSH24" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmRandomTest/201503110346PYTHON_PUSH24Filler.json", "sourceHash" : "953cb389f468c0d45697c57895679d7675ab43de963ad34a0ee547b8d27d10c8" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x012c", "currentTimestamp" : "0x02" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7745414245403745f31387900a8d55", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x270d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x7745414245403745f31387900a8d55", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x7745414245403745f31387900a8d55", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmRandomTest/201503111844PYTHON.json ================================================ { "201503111844PYTHON" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmRandomTest/201503111844PYTHONFiller.json", "sourceHash" : "a8049871a173837bf8fbfab3352baf9bb9e33d0ffa2bd20ba6246a70d9c1b165" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x012c", "currentTimestamp" : "0x02" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x65424555", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x270d", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x65424555", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x65424555", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmRandomTest/201503112218PYTHON.json ================================================ { "201503112218PYTHON" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmRandomTest/201503112218PYTHONFiller.json", "sourceHash" : "6fc205d30fd7493b6e120e18c91e1e41f6fe334b94abadbac37d2817066ebccb" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x012c", "currentTimestamp" : "0x02" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x4041", "data" : "0x", "gas" : "0x2710", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x0de0b6b3a7640000", "code" : "0x4041", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_0.json ================================================ { "sha3_0" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_0Filler.json", "sourceHash" : "843009e4e97d7dd905578ea884db6d80c07f57d58679ec181dc761e1e51ae035" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000600020600055", "data" : "0x", "gas" : "0x174876e800", "gasPrice" : "0x3b9aca00", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x17487699b9", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000600020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000600020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_1.json ================================================ { "sha3_1" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_1Filler.json", "sourceHash" : "5f786aded76570c96466f5a4c4632a5a0b362ffc1e4124667cdb1e9328d1d81d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6005600420600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013850", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600420600055", "nonce" : "0x00", "storage" : { "0x00" : "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6005600420600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_2.json ================================================ { "sha3_2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_2Filler.json", "sourceHash" : "bb3f59dc995c834eaf315b4819900c30ba4e97ef60163aed05946c70e841691f" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600a600a20600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x013850", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a600a20600055", "nonce" : "0x00", "storage" : { "0x00" : "0x6bd2dd6bd408cbee33429358bf24fdc64612fbf8b1b4db604518f40ffd34b607" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x600a600a20600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_3oog.json ================================================ { "sha3_3oog" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_3Filler.json", "sourceHash" : "1f474f7dac8971615e641354d809db332975d1ea5ca589d855fb02a1da559033" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x620fffff6103e820600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x620fffff6103e820600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_4oog.json ================================================ { "sha3_4oog" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_4Filler.json", "sourceHash" : "100da75ff0b63159ca86aa4ef7457a956027af5c6c1ed1f0fa894aaa63849887" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6064640fffffffff20600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6064640fffffffff20600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_5oog.json ================================================ { "sha3_5oog" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_5Filler.json", "sourceHash" : "066bcf3a8e9e7b4c15ec2240c8e1bb0d53de0230c76989e21e4b6aaac83f577d" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x640fffffffff61271020600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x640fffffffff61271020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_6oog.json ================================================ { "sha3_6oog" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_6Filler.json", "sourceHash" : "c360c6583bf965674d153f11c243c1e0807e95e99bc9bcb684a7ad2c7155dd40" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_bigOffset2.json ================================================ { "sha3_bigOffset2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_bigOffset2Filler.json", "sourceHash" : "2bf8d14886b1001b266c29bd9f9e764f7e6965e851bfe1440e536735fca993dc" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6002630100000020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xdfe7a9b0", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x6002630100000020600055", "nonce" : "0x00", "storage" : { "0x00" : "0x54a8c0ab653c15bfb48b47fd011ba2b9617af01cb45cab344acd57c924d56798" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x6002630100000020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_bigOffsetoog.json ================================================ { "sha3_bigOffsetoog" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_bigOffsetFiller.json", "sourceHash" : "1ae2cdfa2e3ab1cac89d8b3d535c3ee50601ebc6098fdbddadca74980eec6382" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60027e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", "data" : "0x", "gas" : "0x010000000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60027e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_bigSizeoog.json ================================================ { "sha3_bigSizeoog" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_bigSizeFiller.json", "sourceHash" : "571bfd9a15c6b0e317f96a92f745aee1d800aa4486c1a101b3e016120ffb5415" }, "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", "data" : "0x", "gas" : "0x010000000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeNoQuadraticCost31.json ================================================ { "sha3_memSizeNoQuadraticCost31" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeNoQuadraticCost31Filler.json", "sourceHash" : "04553284981ef7338bdeac0e029652313a2643169833e386ca34bfa3d5e5942a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016103c020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb155", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016103c020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016103c020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost32.json ================================================ { "sha3_memSizeQuadraticCost32" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost32Filler.json", "sourceHash" : "70f68e0328222cc2c995bf932f2f8f65f5d4c7e9f040a51bbf4dae3cad9110cf" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016103e020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb151", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016103e020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016103e020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost32_zeroSize.json ================================================ { "sha3_memSizeQuadraticCost32_zeroSize" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost32_zeroSizeFiller.json", "sourceHash" : "96094eee3e3fcd478fe3780ff053e64bf5391616bfdc6c2017bf12dcc5d30366" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600061040020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb1b9", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x600061040020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x600061040020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost33.json ================================================ { "sha3_memSizeQuadraticCost33" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost33Filler.json", "sourceHash" : "2fc9e00a7759c4271b6897b285ae437f6484281e9113e82a8252afbe16e85841" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600161040020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb14e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x600161040020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x600161040020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost63.json ================================================ { "sha3_memSizeQuadraticCost63" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost63Filler.json", "sourceHash" : "b81dd9fc94929d24f6a06dac81abb0099b969086ecf83326ecb4d6c98fc36f39" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016107c020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb0ef", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016107c020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016107c020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost64.json ================================================ { "sha3_memSizeQuadraticCost64" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost64Filler.json", "sourceHash" : "9f1ae20cc7b481e84732b835af1d284c815d79a470ceb1094f0cf9e765a64b8d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60016107e020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb0eb", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016107e020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60016107e020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost64_2.json ================================================ { "sha3_memSizeQuadraticCost64_2" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost64_2Filler.json", "sourceHash" : "4d313aaddd74f092eae5089cce1aef3aadc74b019f617fdf24acedd8fb26300b" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x60206107e020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb0eb", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60206107e020600055", "nonce" : "0x00", "storage" : { "0x00" : "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x60206107e020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSha3Test/sha3_memSizeQuadraticCost65.json ================================================ { "sha3_memSizeQuadraticCost65" : { "_info" : { "comment" : "", "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", "source" : "src/VMTestsFiller/vmSha3Test/sha3_memSizeQuadraticCost65Filler.json", "sourceHash" : "28d6ebfb32dd2c00c629fe373fe58fd83466484d6022cd476ca63981ffaa950a" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x600161080020600055", "data" : "0x", "gas" : "0x0100000000", "gasPrice" : "0x01", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, "gas" : "0xffffb0e8", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x600161080020600055", "nonce" : "0x00", "storage" : { "0x00" : "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "code" : "0x600161080020600055", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/TestNameRegistrator.json ================================================ { "TestNameRegistrator" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/TestNameRegistratorFiller.json", "sourceHash" : "7e0e4bcbcbe8bcaf9a8535e65d4c6665db752910953b5eafc63da8f7cdff20b7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x6000355415600957005b60203560003555", "data" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01382b", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa" } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/return0.json ================================================ { "return0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/return0Filler.json", "sourceHash" : "1cd2b9480f1f5bdd82e8026b6342008ef84d318c3f9f173eae7d09e50eaf26b3" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "caller" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "code" : "0x603760005360005160005560016000f3", "data" : "0xaa", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : "0x17" }, "gas" : "0x013865", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x37", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x603760005360005160005560016000f3", "nonce" : "0x00", "storage" : { "0x00" : "0x3700000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x603760005360005160005560016000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/return1.json ================================================ { "return1" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/return1Filler.json", "sourceHash" : "5cd716a8e8d460b10e0dc1b3d5b6394f0c388e0e36246bf124478b0cb86a1f76" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "caller" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "code" : "0x603760005360005160005560026000f3", "data" : "0xaa", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : "0x17" }, "gas" : "0x013865", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x3700", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x603760005360005160005560026000f3", "nonce" : "0x00", "storage" : { "0x00" : "0x3700000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x603760005360005160005560026000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/return2.json ================================================ { "return2" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/return2Filler.json", "sourceHash" : "4181cbf262c1dc2cdc186e007ec6c13466bd031b190b07874b1177a00717deeb" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "caller" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "code" : "0x603760005360005160005560216000f3", "data" : "0xaa", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "value" : "0x17" }, "gas" : "0x013862", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x370000000000000000000000000000000000000000000000000000000000000000", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x603760005360005160005560216000f3", "nonce" : "0x00", "storage" : { "0x00" : "0x3700000000000000000000000000000000000000000000000000000000000000" } } }, "pre" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x603760005360005160005560216000f3", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/suicide0.json ================================================ { "suicide0" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/suicide0Filler.json", "sourceHash" : "56c8766e8a1687dfe807b1e8f2d0454267f432c7e3035ff5fa9c27a2d594739d" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x33ff", "data" : "0x", "gas" : "0x03e8", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0186a0" }, "gas" : "0x03e6", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x152d02c7e14af6800017", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x33ff", "nonce" : "0x00", "storage" : { } }, "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x0186a0", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/suicideNotExistingAccount.json ================================================ { "suicideNotExistingAccount" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/suicideNotExistingAccountFiller.json", "sourceHash" : "ba450a40efb62a9fb6e16e3bced0afde8d0b08b9c0f78979f35fc45b9de72816" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x73aa1722f3947def4cf144679da39c4c32bdc35681ff", "data" : "0x", "gas" : "0x03e8", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0186a0" }, "gas" : "0x03e5", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0xaa1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x", "nonce" : "0x00", "storage" : { } }, "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x73aa1722f3947def4cf144679da39c4c32bdc35681ff", "nonce" : "0x00", "storage" : { } }, "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x0186a0", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmSystemOperations/suicideSendEtherToMe.json ================================================ { "suicideSendEtherToMe" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmSystemOperations/suicideSendEtherToMeFiller.json", "sourceHash" : "0cf005812e9c99dc87bdd8463a9849a0164a9e02b3d09eaab228267d6c8c703e" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x989680", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x30ff", "data" : "0x", "gas" : "0x03e8", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0186a0" }, "gas" : "0x03e6", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x17", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x30ff", "nonce" : "0x00", "storage" : { } }, "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x0186a0", "code" : "0x6000355415600957005b60203560003555", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/VMTests/vmTests/suicide.json ================================================ { "suicide" : { "_info" : { "comment" : "", "filledwith" : "testeth 1.5.0.dev2-52+commit.d419e0a2", "lllcversion" : "Version: 0.4.26-develop.2018.9.19+commit.785cbf40.Linux.g++", "source" : "src/VMTestsFiller/vmTests/suicideFiller.json", "sourceHash" : "4622c577440f9db4b3954a1de60bf2fac55886dcb0ec4ecaf906c25bc77372e7" }, "callcreates" : [ ], "env" : { "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "0x0100", "currentGasLimit" : "0x0f4240", "currentNumber" : "0x00", "currentTimestamp" : "0x01" }, "exec" : { "address" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "code" : "0x33ff", "data" : "0x", "gas" : "0x0186a0", "gasPrice" : "0x5af3107a4000", "origin" : "0xcd1722f3947def4cf144679da39c4c32bdc35681", "value" : "0x0de0b6b3a7640000" }, "gas" : "0x01869e", "logs" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "out" : "0x", "post" : { "0xcd1722f3947def4cf144679da39c4c32bdc35681" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x", "nonce" : "0x00", "storage" : { } } }, "pre" : { "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "0x152d02c7e14af6800000", "code" : "0x33ff", "nonce" : "0x00", "storage" : { } } } } } ================================================ FILE: tests/laser/evm_testsuite/evm_test.py ================================================ import binascii import json from datetime import datetime from pathlib import Path import pytest from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.time_handler import time_handler from mythril.laser.ethereum.transaction.concolic import execute_message_call from mythril.laser.smt import Expression, symbol_factory from mythril.support.support_args import args evm_test_dir = Path(__file__).parent / "VMTests" test_types = [ "vmArithmeticTest", "vmBitwiseLogicOperation", "vmEnvironmentalInfo", "vmPushDupSwapTest", "vmTests", "vmSha3Test", "vmSystemOperations", "vmRandomTest", "vmIOandFlowOperations", ] tests_with_gas_support = ["gas0", "gas1"] tests_with_block_number_support = [ "BlockNumberDynamicJumpi0", "BlockNumberDynamicJumpi1", "BlockNumberDynamicJump0_jumpdest2", "DynamicJumpPathologicalTest0", "BlockNumberDynamicJumpifInsidePushWithJumpDest", "BlockNumberDynamicJumpiAfterStop", "BlockNumberDynamicJumpifInsidePushWithoutJumpDest", "BlockNumberDynamicJump0_jumpdest0", "BlockNumberDynamicJumpi1_jumpdest", "BlockNumberDynamicJumpiOutsideBoundary", "DynamicJumpJD_DependsOnJumps1", ] tests_with_log_support = ["log1MemExp"] tests_not_relevent = [ "loop_stacklimit_1020", # We won't be looping till 1020 as we have a max_depth "loop_stacklimit_1021", ] tests_to_resolve = ["jumpTo1InstructionafterJump", "sstore_load_2", "jumpi_at_the_end"] ignored_test_names = ( tests_with_gas_support + tests_with_log_support + tests_with_block_number_support + tests_with_block_number_support + tests_not_relevent + tests_to_resolve ) def load_test_data(designations): """ :param designations: :return: """ return_data = [] for designation in designations: for file_reference in (evm_test_dir / designation).iterdir(): with file_reference.open() as file: top_level = json.load(file) for test_name, data in top_level.items(): pre_condition = data["pre"] action = data["exec"] gas_before = int(action["gas"], 16) gas_after = data.get("gas") gas_used = ( gas_before - int(gas_after, 16) if gas_after is not None else None ) post_condition = data.get("post", {}) environment = data.get("env") return_data.append( ( test_name, environment, pre_condition, action, gas_used, post_condition, ) ) return return_data @pytest.mark.parametrize( "test_name, environment, pre_condition, action, gas_used, post_condition", load_test_data(test_types), ) def test_vmtest( test_name: str, environment: dict, pre_condition: dict, action: dict, gas_used: int, post_condition: dict, ) -> None: # Arrange if test_name in ignored_test_names: return world_state = WorldState() args.unconstrained_storage = False args.pruning_factor = 1 for address, details in pre_condition.items(): account = Account(address, concrete_storage=True) account.code = Disassembly(details["code"][2:]) account.nonce = int(details["nonce"], 16) for key, value in details["storage"].items(): key_bitvec = symbol_factory.BitVecVal(int(key, 16), 256) account.storage[key_bitvec] = symbol_factory.BitVecVal(int(value, 16), 256) world_state.put_account(account) account.set_balance(int(details["balance"], 16)) time_handler.start_execution(10000) laser_evm = LaserEVM() laser_evm.open_states = [world_state] # Act laser_evm.time = datetime.now() final_states = execute_message_call( laser_evm, callee_address=symbol_factory.BitVecVal(int(action["address"], 16), 256), caller_address=symbol_factory.BitVecVal(int(action["caller"], 16), 256), origin_address=symbol_factory.BitVecVal(int(action["origin"], 16), 256), code=action["code"][2:], gas_limit=int(action["gas"], 16), data=binascii.a2b_hex(action["data"][2:]), gas_price=int(action["gasPrice"], 16), value=int(action["value"], 16), track_gas=True, ) # Assert if gas_used is not None and gas_used < int(environment["currentGasLimit"], 16): # avoid gas usage larger than block gas limit # this currently exceeds our estimations gas_min_max = [ (s.mstate.min_gas_used, s.mstate.max_gas_used) for s in final_states ] gas_ranges = [g[0] <= gas_used for g in gas_min_max] assert all(map(lambda g: g[0] <= g[1], gas_min_max)) assert any(gas_ranges) if post_condition == {}: # no more work to do if error happens or out of gas assert len(laser_evm.open_states) == 0 else: assert len(laser_evm.open_states) == 1 world_state = laser_evm.open_states[0] for address, details in post_condition.items(): account = world_state[symbol_factory.BitVecVal(int(address, 16), 256)] assert account.nonce == int(details["nonce"], 16) assert account.code.bytecode == details["code"][2:] for index, value in details["storage"].items(): expected = int(value, 16) actual = account.storage[symbol_factory.BitVecVal(int(index, 16), 256)] if isinstance(actual, Expression): actual = actual.value actual = 1 if actual is True else 0 if actual is False else actual else: if isinstance(actual, bytes): actual = int(binascii.b2a_hex(actual), 16) elif isinstance(actual, str): actual = int(actual, 16) assert actual == expected ================================================ FILE: tests/laser/keccak_tests.py ================================================ import pytest import z3 from mythril.laser.ethereum.function_managers import keccak_function_manager from mythril.laser.smt import Solver, symbol_factory @pytest.mark.parametrize( "input1, input2, expected", [ (symbol_factory.BitVecVal(100, 8), symbol_factory.BitVecVal(101, 8), z3.unsat), (symbol_factory.BitVecVal(100, 8), symbol_factory.BitVecVal(100, 16), z3.unsat), (symbol_factory.BitVecVal(100, 8), symbol_factory.BitVecVal(100, 8), z3.sat), ( symbol_factory.BitVecSym("N1", 256), symbol_factory.BitVecSym("N2", 256), z3.sat, ), ( symbol_factory.BitVecVal(100, 256), symbol_factory.BitVecSym("N1", 256), z3.sat, ), ( symbol_factory.BitVecVal(100, 8), symbol_factory.BitVecSym("N1", 256), z3.unsat, ), ], ) def test_keccak_basic(input1, input2, expected): s = Solver() keccak_function_manager.reset() o1 = keccak_function_manager.create_keccak(input1) o2 = keccak_function_manager.create_keccak(input2) s.add(keccak_function_manager.create_conditions()) s.add(o1 == o2) assert s.check() == expected def test_keccak_symbol_and_val(): """ check keccak(100) == keccak(n) && n == 10 :return: """ s = Solver() keccak_function_manager.reset() hundred = symbol_factory.BitVecVal(100, 256) n = symbol_factory.BitVecSym("n", 256) o1 = keccak_function_manager.create_keccak(hundred) o2 = keccak_function_manager.create_keccak(n) s.add(keccak_function_manager.create_conditions()) s.add(o1 == o2) s.add(n == symbol_factory.BitVecVal(10, 256)) assert s.check() == z3.unsat def test_keccak_complex_eq(): """ check for keccak(keccak(b)*2) == keccak(keccak(a)*2) && a != b :return: """ keccak_function_manager.reset() s = Solver() a = symbol_factory.BitVecSym("a", 160) b = symbol_factory.BitVecSym("b", 160) o1 = keccak_function_manager.create_keccak(a) o2 = keccak_function_manager.create_keccak(b) two = symbol_factory.BitVecVal(2, 256) o1 = two * o1 o2 = two * o2 o1 = keccak_function_manager.create_keccak(o1) o2 = keccak_function_manager.create_keccak(o2) s.add(keccak_function_manager.create_conditions()) s.add(o1 == o2) s.add(a != b) assert s.check() == z3.unsat def test_keccak_complex_eq2(): """ check for keccak(keccak(b)*2) == keccak(keccak(a)*2) This isn't combined with prev test because incremental solving here requires extra-extra work (solution is literally the opposite of prev one) so it will take forever to solve. :return: """ keccak_function_manager.reset() s = Solver() a = symbol_factory.BitVecSym("a", 160) b = symbol_factory.BitVecSym("b", 160) o1 = keccak_function_manager.create_keccak(a) o2 = keccak_function_manager.create_keccak(b) two = symbol_factory.BitVecVal(2, 256) o1 = two * o1 o2 = two * o2 o1 = keccak_function_manager.create_keccak(o1) o2 = keccak_function_manager.create_keccak(o2) s.add(keccak_function_manager.create_conditions()) s.add(o1 == o2) assert s.check() == z3.sat def test_keccak_simple_number(): """ check for keccak(b) == 10 :return: """ keccak_function_manager.reset() s = Solver() a = symbol_factory.BitVecSym("a", 160) ten = symbol_factory.BitVecVal(10, 256) o = keccak_function_manager.create_keccak(a) s.add(keccak_function_manager.create_conditions()) s.add(ten == o) assert s.check() == z3.unsat def test_keccak_other_num(): """ check keccak(keccak(a)*2) == b :return: """ keccak_function_manager.reset() s = Solver() a = symbol_factory.BitVecSym("a", 160) b = symbol_factory.BitVecSym("b", 256) o = keccak_function_manager.create_keccak(a) two = symbol_factory.BitVecVal(2, 256) o = two * o o = keccak_function_manager.create_keccak(o) s.add(keccak_function_manager.create_conditions()) s.add(b == o) assert s.check() == z3.sat ================================================ FILE: tests/laser/smt/__init__.py ================================================ ================================================ FILE: tests/laser/smt/independece_solver_test.py ================================================ import z3 from mythril.laser.smt import symbol_factory from mythril.laser.smt.solver.independence_solver import ( DependenceBucket, DependenceMap, IndependenceSolver, _get_expr_variables, ) def test_get_expr_variables(): # Arrange x = z3.Bool("x") y = z3.BitVec("y", 256) z = z3.BitVec("z", 256) b = z3.BitVec("b", 256) expression = z3.If(x, y, z + b) # Act variables = list(map(str, _get_expr_variables(expression))) # Assert assert str(x) in variables assert str(y) in variables assert str(z) in variables assert str(b) in variables def test_get_expr_variables_num(): # Arrange b = z3.BitVec("b", 256) expression = b + z3.BitVecVal(2, 256) # Act variables = _get_expr_variables(expression) # Assert assert [b] == variables def test_create_bucket(): # Arrange x = z3.Bool("x") # Act bucket = DependenceBucket([x], [x]) # Assert assert [x] == bucket.variables assert [x] == bucket.conditions def test_dependence_map(): # Arrange x = z3.BitVec("x", 256) y = z3.BitVec("y", 256) z = z3.BitVec("z", 256) a = z3.BitVec("a", 256) b = z3.BitVec("b", 256) conditions = [x > y, y == z, a == b] dependence_map = DependenceMap() # Act for condition in conditions: dependence_map.add_condition(condition) # Assert assert 2 == len(dependence_map.buckets) assert x in dependence_map.buckets[0].variables assert y in dependence_map.buckets[0].variables assert z in dependence_map.buckets[0].variables assert len(set(dependence_map.buckets[0].variables)) == 3 assert conditions[0] in dependence_map.buckets[0].conditions assert conditions[1] in dependence_map.buckets[0].conditions assert a in dependence_map.buckets[1].variables assert b in dependence_map.buckets[1].variables assert len(set(dependence_map.buckets[1].variables)) == 2 assert conditions[2] in dependence_map.buckets[1].conditions def test_Independence_solver_unsat(): # Arrange x = symbol_factory.BitVecSym("x", 256) y = symbol_factory.BitVecSym("y", 256) z = symbol_factory.BitVecSym("z", 256) a = symbol_factory.BitVecSym("a", 256) b = symbol_factory.BitVecSym("b", 256) conditions = [x > y, y == z, y != z, a == b] solver = IndependenceSolver() # Act solver.add(*conditions) result = solver.check() # Assert assert z3.unsat == result def test_independence_solver_unsat_in_second_bucket(): # Arrange x = symbol_factory.BitVecSym("x", 256) y = symbol_factory.BitVecSym("y", 256) z = symbol_factory.BitVecSym("z", 256) a = symbol_factory.BitVecSym("a", 256) b = symbol_factory.BitVecSym("b", 256) conditions = [x > y, y == z, a == b, a != b] solver = IndependenceSolver() # Act solver.add(*conditions) result = solver.check() # Assert assert z3.unsat == result def test_independence_solver_sat(): # Arrange x = symbol_factory.BitVecSym("x", 256) y = symbol_factory.BitVecSym("y", 256) z = symbol_factory.BitVecSym("z", 256) a = symbol_factory.BitVecSym("a", 256) b = symbol_factory.BitVecSym("b", 256) conditions = [x > y, y == z, a == b] solver = IndependenceSolver() # Act solver.add(*conditions) result = solver.check() # Assert assert z3.sat == result ================================================ FILE: tests/laser/smt/model_test.py ================================================ import z3 from mythril.laser.smt import Solver, symbol_factory def test_decls(): # Arrange solver = Solver() x = symbol_factory.BitVecSym("x", 256) expression = x == symbol_factory.BitVecVal(2, 256) # Act solver.add(expression) result = solver.check() model = solver.model() decls = model.decls() # Assert assert z3.sat == result assert x.raw.decl() in decls def test_get_item(): # Arrange solver = Solver() x = symbol_factory.BitVecSym("x", 256) expression = x == symbol_factory.BitVecVal(2, 256) # Act solver.add(expression) result = solver.check() model = solver.model() x_concrete = model[x.raw.decl()] # Assert assert z3.sat == result assert 2 == x_concrete def test_as_long(): # Arrange solver = Solver() x = symbol_factory.BitVecSym("x", 256) expression = x == symbol_factory.BitVecVal(2, 256) # Act solver.add(expression) result = solver.check() model = solver.model() x_concrete = model.eval(x.raw).as_long() # Assert assert z3.sat == result assert 2 == x_concrete ================================================ FILE: tests/laser/state/__init__.py ================================================ ================================================ FILE: tests/laser/state/calldata_test.py ================================================ import pytest from z3 import unsat from mythril.laser.ethereum.state.calldata import ConcreteCalldata, SymbolicCalldata from mythril.laser.smt import Solver, symbol_factory uninitialized_test_data = [ ([]), # Empty concrete calldata ([1, 4, 5, 3, 4, 72, 230, 53]), # Concrete calldata ] @pytest.mark.parametrize("starting_calldata", uninitialized_test_data) def test_concrete_calldata_uninitialized_index(starting_calldata): # Arrange calldata = ConcreteCalldata(0, starting_calldata) # Act value = calldata[100] value2 = calldata.get_word_at(200) # Assert assert value == 0 assert value2 == 0 def test_concrete_calldata_calldatasize(): # Arrange calldata = ConcreteCalldata(0, [1, 4, 7, 3, 7, 2, 9]) solver = Solver() # Act solver.check() model = solver.model() result = model.eval(calldata.calldatasize.raw) # Assert assert result == 7 def test_concrete_calldata_constrain_index(): # Arrange calldata = ConcreteCalldata(0, [1, 4, 7, 3, 7, 2, 9]) solver = Solver() # Act value = calldata[2] constraint = value == 3 solver.add(constraint) result = solver.check() # Assert assert str(result) == "unsat" def test_symbolic_calldata_constrain_index(): # Arrange calldata = SymbolicCalldata(0) solver = Solver() # Act value = calldata[51] constraints = [value == 1, calldata.calldatasize == 50] solver.add(*constraints) result = solver.check() # Assert assert str(result) == "unsat" def test_symbolic_calldata_equal_indices(): calldata = SymbolicCalldata(0) index_a = symbol_factory.BitVecSym("index_a", 256) index_b = symbol_factory.BitVecSym("index_b", 256) # Act a = calldata[index_a] b = calldata[index_b] s = Solver() s.append(index_a == index_b) s.append(a != b) # Assert assert unsat == s.check() ================================================ FILE: tests/laser/state/mstack_test.py ================================================ import pytest from mythril.laser.ethereum.evm_exceptions import ( StackOverflowException, StackUnderflowException, ) from mythril.laser.ethereum.state.machine_state import MachineStack from tests import BaseTestCase class MachineStackTest(BaseTestCase): @staticmethod def test_mstack_constructor(): mstack = MachineStack([1, 2]) assert mstack == [1, 2] @staticmethod def test_mstack_append_single_element(): mstack = MachineStack() mstack.append(0) assert mstack == [0] @staticmethod def test_mstack_append_multiple_elements(): mstack = MachineStack() for i in range(mstack.STACK_LIMIT): mstack.append(1) with pytest.raises(StackOverflowException): mstack.append(1000) @staticmethod def test_mstack_pop(): mstack = MachineStack([2]) assert mstack.pop() == 2 with pytest.raises(StackUnderflowException): mstack.pop() @staticmethod def test_mstack_no_support_add(): mstack = MachineStack([0, 1]) with pytest.raises(NotImplementedError): mstack + [2] @staticmethod def test_mstack_no_support_iadd(): mstack = MachineStack() with pytest.raises(NotImplementedError): mstack += mstack ================================================ FILE: tests/laser/state/mstate_test.py ================================================ import pytest from eth._utils.numeric import ceil32 from mythril.laser.ethereum.evm_exceptions import StackUnderflowException from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.memory import Memory from mythril.laser.smt import Concat, Extract, simplify, symbol_factory memory_extension_test_data = [(0, 0, 10), (0, 30, 10), (100, 22, 8)] @pytest.mark.parametrize( "initial_size,start,extension_size", memory_extension_test_data ) def test_memory_extension(initial_size, start, extension_size): # Arrange machine_state = MachineState(gas_limit=8000000) machine_state.memory = Memory() machine_state.memory.extend(initial_size) # Act machine_state.mem_extend(start, extension_size) # Assert assert machine_state.memory_size == len(machine_state.memory) assert machine_state.memory_size == max( initial_size, (ceil32(start + extension_size) // 32) * 32 ) stack_pop_too_many_test_data = [(0, 1), (0, 2), (5, 1), (5, 10)] @pytest.mark.parametrize("initial_size,overflow", stack_pop_too_many_test_data) def test_stack_pop_too_many(initial_size, overflow): # Arrange machine_state = MachineState(8000000) machine_state.stack = [42] * initial_size # Act + Assert with pytest.raises(StackUnderflowException): machine_state.pop(initial_size + overflow) stack_pop_test_data = [ ([1, 2, 3], 2, [3, 2]), ([1, 3, 4, 7, 7, 1, 2], 5, [2, 1, 7, 7, 4]), ] @pytest.mark.parametrize("initial_stack,amount,expected", stack_pop_test_data) def test_stack_multiple_pop(initial_stack, amount, expected): # Arrange machine_state = MachineState(8000000) machine_state.stack = initial_stack[:] # Act results = machine_state.pop(amount) # Assert assert results == initial_stack[-amount:][::-1] assert results == expected assert len(machine_state.stack) == len(initial_stack) - amount def test_stack_multiple_pop_(): # Arrange machine_state = MachineState(8000000) machine_state.stack = [1, 2, 3] # Act a, b = machine_state.pop(2) # Assert assert a == 3 assert b == 2 def test_stack_single_pop(): # Arrange machine_state = MachineState(8000000) machine_state.stack = [1, 2, 3] # Act result = machine_state.pop() # Assert assert isinstance(result, int) def test_memory_zeroed(): # Arrange mem = Memory() mem.extend(2000 + 32) # Act mem[11] = 10 mem.write_word_at(2000, 0x12345) # Assert assert mem[10] == 0 assert mem[100] == 0 assert mem.get_word_at(1000) == 0 def test_memory_write(): # Arrange mem = Memory() mem.extend(200 + 32) a = symbol_factory.BitVecSym("a", 256) b = symbol_factory.BitVecSym("b", 8) # Act mem[11] = 10 mem[12] = b mem.write_word_at(200, 0x12345) mem.write_word_at(100, a) # Assert assert mem[0] == 0 assert mem[11] == 10 assert mem[200 + 31] == 0x45 assert mem.get_word_at(200) == 0x12345 assert simplify(a == mem.get_word_at(100)) assert simplify(b == mem[12]) def test_memory_symbolic(): # Arrange mem = Memory() mem.extend(200 + 32) a = symbol_factory.BitVecSym("a", 256) b = symbol_factory.BitVecSym("b", 256) # Act mem.write_word_at(a + symbol_factory.BitVecVal(1, 256), b) # Assert assert mem.get_word_at(a) == Concat( symbol_factory.BitVecVal(0, 256), Extract(255, 8, b) ) assert mem[a] == 0 ================================================ FILE: tests/laser/state/storage_test.py ================================================ import pytest from mythril.laser.ethereum.state.account import Storage from mythril.laser.smt import Expression, symbol_factory from mythril.support.support_args import args BVV = symbol_factory.BitVecVal storage_uninitialized_test_data = [({}, 1), ({1: 5}, 2), ({1: 5, 3: 10}, 2)] @pytest.mark.parametrize("initial_storage,key", storage_uninitialized_test_data) def test_concrete_storage_uninitialized_index(initial_storage, key): # Arrange args.unconstrained_storage = False storage = Storage(concrete=True) for k, val in initial_storage.items(): storage[BVV(k, 256)] = BVV(val, 256) # Act value = storage[BVV(key, 256)] # Assert assert value == 0 @pytest.mark.parametrize("initial_storage,key", storage_uninitialized_test_data) def test_symbolic_storage_uninitialized_index(initial_storage, key): # Arrange storage = Storage(concrete=False) for k, val in initial_storage.items(): storage[BVV(k, 256)] = BVV(val, 256) # Act value = storage[BVV(key, 256)] # Assert assert isinstance(value, Expression) def test_storage_set_item(): # Arrange storage = Storage() # Act storage[BVV(1, 256)] = BVV(13, 256) # Assert assert storage[BVV(1, 256)] == BVV(13, 256) def test_storage_change_item(): # Arrange storage = Storage() storage[BVV(1, 256)] = BVV(12, 256) # Act storage[BVV(1, 256)] = BVV(14, 256) # Assert assert storage[BVV(1, 256)] == BVV(14, 256) ================================================ FILE: tests/laser/state/world_state_account_exist_load_test.py ================================================ """ def _get_global_state(): active_account = Account("0x0", code=Disassembly("60606040")) passive_account = Account( "0x325345346564645654645", code=Disassembly("6060604061626364") ) environment = Environment(active_account, None, None, None, None, None) world_state = WorldState() world_state.put_account(active_account) world_state.put_account(passive_account) return GlobalState(world_state, environment, None, MachineState(gas_limit=8000000)) @pytest.mark.parametrize( "addr, eth, code_len", [ ( "0xb09C477eCDAd49DD5Ac26c2C64914C3a6693843a", EthJsonRpc("rinkeby.infura.io", 443, True), 1548, ), ( "0x863DF6BFa4469f3ead0bE8f9F2AAE51c91A907b4", EthJsonRpc("mainnet.infura.io", 443, True), 0, ), ( "0x325345346564645654645", EthJsonRpc("mainnet.infura.io", 443, True), 16, ), # This contract tests Address Cache ], ) def test_extraction(addr, eth, code_len): global_state = _get_global_state() dynamic_loader = DynLoader(eth=eth) code = global_state.world_state.accounts_exist_or_load( addr, dynamic_loader ).code.bytecode assert len(code) == code_len """ ================================================ FILE: tests/laser/strategy/beam_test.py ================================================ import pytest from mythril.analysis.potential_issues import PotentialIssuesAnnotation from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum.state.environment import Environment from mythril.laser.ethereum.state.global_state import GlobalState from mythril.laser.ethereum.state.machine_state import MachineState from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.strategy.beam import ( BeamSearch, ) world_state = WorldState() account = world_state.create_account(balance=10, address=101) account.code = Disassembly("60606040") environment = Environment(account, None, None, None, None, None, None) potential_issues = PotentialIssuesAnnotation() # It is a hassle to construct multiple issues potential_issues.potential_issues = [0, 0] @pytest.mark.parametrize( "state, priority", [ ( GlobalState( world_state, environment, None, MachineState(gas_limit=8000000), annotations=[PotentialIssuesAnnotation()], ), 0, ), ( GlobalState( world_state, environment, None, MachineState(gas_limit=8000000), annotations=[potential_issues], ), 20, ), ], ) def test_priority_sum(state, priority): assert priority == BeamSearch.beam_priority(state) @pytest.mark.parametrize( "states, width", [ ( [ GlobalState( world_state, environment, None, MachineState(gas_limit=8000000), annotations=[PotentialIssuesAnnotation()], ), GlobalState( world_state, environment, None, MachineState(gas_limit=8000000), annotations=[potential_issues], ), ], 1, ), ( 100 * [ GlobalState( world_state, environment, None, MachineState(gas_limit=8000000), annotations=[PotentialIssuesAnnotation()], ) ], 1, ), ( 100 * [ GlobalState( world_state, environment, None, MachineState(gas_limit=8000000), annotations=[PotentialIssuesAnnotation()], ) ], 0, ), ], ) def test_elimination(states, width): strategy = BeamSearch(states, max_depth=100, beam_width=width) strategy.sort_and_eliminate_states() assert len(strategy.work_list) <= width for i in range(len(strategy.work_list) - 1): assert strategy.beam_priority(strategy.work_list[i]) >= strategy.beam_priority( strategy.work_list[i + 1] ) ================================================ FILE: tests/laser/strategy/loop_bound_test.py ================================================ import pytest from mythril.laser.ethereum.strategy.extensions.bounded_loops import ( BoundedLoopsStrategy, ) @pytest.mark.parametrize( "trace, count", [ ([6, 7, 7, 7], 3), ([6, 8, 6, 7, 6, 7, 6, 7, 6, 7], 4), ([6, 6, 6, 6], 4), ([6, 7, 8] * 10, 10), ([7, 9, 10] + list(range(1, 100)) * 100, 100), ([7, 10, 15], 0), ([7] * 100, 100), ], ) def test_loop_count(trace, count): assert count == BoundedLoopsStrategy.get_loop_count(trace) ================================================ FILE: tests/laser/transaction/__init__.py ================================================ ================================================ FILE: tests/laser/transaction/create_transaction_test.py ================================================ from datetime import datetime import mythril.laser.ethereum.svm as svm import tests from mythril.analysis.security import fire_lasers from mythril.analysis.symbolic import SymExecWrapper from mythril.disassembler.disassembly import Disassembly from mythril.ethereum import util from mythril.laser.ethereum.transaction import execute_contract_creation from mythril.mythril import MythrilDisassembler from mythril.solidity.soliditycontract import SolidityContract solc_binary = MythrilDisassembler._init_solc_binary("v0.5.0") def test_create(): contract = SolidityContract( str(tests.TESTDATA_INPUTS_CONTRACTS / "calls.sol"), solc_binary=solc_binary ) laser_evm = svm.LaserEVM({}) laser_evm.time = datetime.now() execute_contract_creation(laser_evm, contract.creation_code) resulting_final_state = laser_evm.open_states[0] for address, created_account in resulting_final_state.accounts.items(): created_account_code = created_account.code actual_code = Disassembly(contract.code) for i in range(len(created_account_code.instruction_list)): found_instruction = created_account_code.instruction_list[i] actual_instruction = actual_code.instruction_list[i] assert found_instruction["opcode"] == actual_instruction["opcode"] def test_sym_exec(): contract = SolidityContract( str(tests.TESTDATA_INPUTS_CONTRACTS / "calls.sol"), solc_binary=solc_binary ) sym = SymExecWrapper( contract, address=(util.get_indexed_address(0)), strategy="dfs", execution_timeout=25, ) issues = fire_lasers(sym) assert len(issues) != 0 ================================================ FILE: tests/laser/transaction/symbolic_test.py ================================================ import unittest.mock as mock from unittest.mock import MagicMock from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.world_state import WorldState from mythril.laser.ethereum.svm import LaserEVM from mythril.laser.ethereum.transaction import ( ContractCreationTransaction, MessageCallTransaction, ) from mythril.laser.ethereum.transaction.symbolic import ( execute_contract_creation, execute_message_call, ) from mythril.laser.smt import symbol_factory def _is_message_call(_, transaction, transaction_sequences): assert isinstance(transaction, MessageCallTransaction) def _is_contract_creation(_, transaction): assert isinstance(transaction, ContractCreationTransaction) @mock.patch( "mythril.laser.ethereum.transaction.symbolic._setup_global_state_for_execution" ) def test_execute_message_call(mocked_setup: MagicMock): # Arrange laser_evm = LaserEVM({}) world_state = WorldState() world_state.put_account(Account("0x0")) laser_evm.open_states = [world_state] laser_evm.exec = MagicMock() mocked_setup.side_effect = _is_message_call # Act execute_message_call(laser_evm, symbol_factory.BitVecVal(0, 256)) # Assert # laser_evm.exec.assert_called_once() assert laser_evm.exec.call_count == 1 # mocked_setup.assert_called_once() assert mocked_setup.call_count == 1 assert len(laser_evm.open_states) == 0 @mock.patch( "mythril.laser.ethereum.transaction.symbolic._setup_global_state_for_execution" ) def test_execute_contract_creation(mocked_setup: MagicMock): # Arrange laser_evm = LaserEVM({}) laser_evm.open_states = [WorldState(), WorldState()] laser_evm.exec = MagicMock() mocked_setup.side_effect = _is_contract_creation # Act execute_contract_creation(laser_evm, "606000") # Assert # mocked_setup.assert_called() assert mocked_setup.call_count >= 1 # laser_evm.exec.assert_called_once() assert laser_evm.exec.call_count == 1 assert len(laser_evm.open_states) == 0 ================================================ FILE: tests/laser/transaction_test.py ================================================ from mythril.disassembler.disassembly import Disassembly from mythril.laser.ethereum import svm from mythril.laser.ethereum.state.account import Account from mythril.laser.ethereum.state.world_state import WorldState from mythril.support.support_args import args def test_intercontract_call(): # Arrange caller_code = Disassembly( "6080604052348015600f57600080fd5b5073deadbeefdeadbeefdeadbeefdeadbeefdeadbeef73ffffffffffffffffffffffffffffffffffffffff166389627e13336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801560be57600080fd5b505af115801560d1573d6000803e3d6000fd5b505050506040513d602081101560e657600080fd5b8101908080519060200190929190505050500000a165627a7a72305820fdb1e90f0d9775c94820e516970e0d41380a94624fa963c556145e8fb645d4c90029" ) caller_address = "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" callee_code = Disassembly( "608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806389627e13146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506084565b005b8073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801560e0573d6000803e3d6000fd5b50505600a165627a7a72305820a6b1335d6f994632bc9a7092d0eaa425de3dea05e015af8a94ad70b3969e117a0029" ) callee_address = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" world_state = WorldState() caller_account = Account(caller_address, caller_code, contract_name="Caller") callee_account = Account(callee_address, callee_code, contract_name="Callee") world_state.put_account(callee_account) world_state.put_account(caller_account) args.pruning_factor = 1 laser = svm.LaserEVM() # Act laser.sym_exec(world_state=world_state, target_address=int(caller_address, 16)) # Assert # Initial node starts in contract caller assert len(laser.nodes.keys()) > 0 node_id = list(laser.nodes.keys())[0] assert laser.nodes[node_id].contract_name == "Caller" # At one point we call into contract callee for node in laser.nodes.values(): if node.contract_name == "Callee": assert len(node.states[0].transaction_stack) > 1 return assert False ================================================ FILE: tests/laser/tx_prioritisation_test.py ================================================ from unittest.mock import Mock, mock_open, patch import numpy as np import pytest from mythril.laser.ethereum.tx_prioritiser import RfTxPrioritiser def mock_predict_proba(X): if X[0][-1] == 1: return np.array([[0.1, 0.7, 0.1, 0.1]]) elif X[0][-1] == 2: return np.array([[0.1, 0.1, 0.7, 0.1]]) else: return np.array([[0.1, 0.1, 0.1, 0.7]]) class MockSolidityContract: def __init__(self, features): self.features = features @pytest.fixture def rftp_instance(): contract = MockSolidityContract( features={"function1": {"feature1": 1, "feature2": 2}} ) with patch("pickle.load") as mock_pickle_load, patch("builtins.open", mock_open()): mock_model = Mock() mock_model.predict_proba = mock_predict_proba mock_pickle_load.return_value = mock_model rftp = RfTxPrioritiser(contract=contract, model_path="path/to/mock/model.pkl") return rftp def test_preprocess_features(rftp_instance): expected_features = np.array([[1, 2]]) assert np.array_equal(rftp_instance.preprocessed_features, expected_features) @pytest.mark.parametrize( "address,previous_predictions,expected_sequence", [ (1, [], [2, 2, 2]), (2, [], [2, 2, 2]), (1, [0], [3, 3, 3]), (2, [1], [1, 1, 1]), (3, [1, 2], [2, 2, 2]), (1, [0, 2, 5], [3, 3, 3]), ], ) def test_next_method(rftp_instance, address, previous_predictions, expected_sequence): rftp_instance.recent_predictions = previous_predictions predictions_sequence = rftp_instance.__next__(address=address) assert len(predictions_sequence) == 3 assert predictions_sequence == expected_sequence ================================================ FILE: tests/mythril/mythril_analyzer_test.py ================================================ from pathlib import Path from types import SimpleNamespace from unittest.mock import PropertyMock, patch from mythril.analysis.report import Issue from mythril.mythril import MythrilAnalyzer, MythrilDisassembler @patch("mythril.analysis.report.Issue.add_code_info", return_value=None) @patch( "mythril.mythril.mythril_analyzer.fire_lasers", return_value=[Issue("", "", "234", "101", "title", "0x02445")], ) @patch("mythril.mythril.mythril_analyzer.SymExecWrapper") def test_fire_lasers(mock_sym, mock_fire_lasers, mock_code_info): type(mock_sym.return_value).execution_info = PropertyMock(return_value=[]) disassembler = MythrilDisassembler(eth=None, solc_version="v0.5.0") disassembler.load_from_solidity( [ str( ( Path(__file__).parent.parent / "testdata/input_contracts/origin.sol" ).absolute() ) ] ) args = SimpleNamespace( execution_timeout=5, max_depth=30, solver_timeout=10000, no_onchain_data=True, loop_bound=None, create_timeout=None, disable_dependency_pruning=False, custom_modules_directory=None, pruning_factor=0, parallel_solving=True, unconstrained_storage=True, call_depth_limit=3, disable_iprof=True, solver_log=None, transaction_sequences=None, disable_coverage_strategy=False, disable_mutation_pruner=False, enable_summaries=False, enable_state_merging=False, ) analyzer = MythrilAnalyzer(disassembler, cmd_args=args) issues = analyzer.fire_lasers(modules=[]).sorted_issues() mock_sym.assert_called() mock_fire_lasers.assert_called() mock_code_info.assert_called() assert len(issues) == 1 assert issues[0]["swc-id"] == "101" ================================================ FILE: tests/mythril/mythril_config_test.py ================================================ from configparser import ConfigParser from pathlib import Path import pytest from mythril.exceptions import CriticalError from mythril.mythril import MythrilConfig def test_config_path_dynloading(): config = MythrilConfig() config.config_path = str( Path(__file__).parent.parent / "testdata/mythril_config_inputs/config.ini" ) config.set_api_from_config_path() assert "mainnet.infura.io/v3/" in config.eth.host rpc_types_tests = [ ("infura", "mainnet.infura.io/v3/", None, True), ("ganache", "localhost", None, True), ("infura-rinkeby", "rinkeby.infura.io/v3/", None, True), ("infura-ropsten", "ropsten.infura.io/v3/", None, True), ("infura-kovan", "kovan.infura.io/v3/", None, True), ("localhost", "localhost", 8545, True), ("localhost:9022", "localhost", 9022, True), ("pinfura", None, None, False), ("infura-finkeby", None, None, False), ] @pytest.mark.parametrize("rpc_type,host,port,success", rpc_types_tests) def test_set_rpc(rpc_type, host, port, success): config = MythrilConfig() if success: config._set_rpc(rpc_type) assert host in config.eth.host else: with pytest.raises(CriticalError): config._set_rpc(rpc_type) def test_dynld_config_addition(): config = ConfigParser() config.add_section("defaults") MythrilConfig._add_dynamic_loading_option(config) assert config.has_section("defaults") assert config.get("defaults", "dynamic_loading") == "infura" ================================================ FILE: tests/mythril/mythril_disassembler_test.py ================================================ from mythril.mythril import MythrilDisassembler storage_test = [ ( ["438767356", "3"], [ "0x1a270efc: 0x0000000000000000000000000000000000000000000000000000000000000000", "0x1a270efd: 0x0000000000000000000000000000000000000000000000000000000000000000", "0x1a270efe: 0x0000000000000000000000000000000000000000000000000000000000000000", ], ), ( ["mapping", "4588934759847", "1", "2"], [ "0x7e523d5aeb10cdb378b0b1f76138c28063a2cb9ec8ff710f42a0972f4d53cf44: " "0x0000000000000000000000000000000000000000000000000000000000000000", "0xba36da34ceec88853a2ebdde88e023c6919b90348f41e8905b422dc9ce22301c: " "0x0000000000000000000000000000000000000000000000000000000000000000", ], ), ( ["mapping", "4588934759847", "10"], [ "45998575720532480608987132552042185415362901038635143236141343153058112000553: " "0x0000000000000000000000000000000000000000000000000000000000000000" ], ), ( ["4588934759847", "1", "array"], [ "30699902832541380821728647136767910246735388184559883985790189062258823875816: " "0x0000000000000000000000000000000000000000000000000000000000000000" ], ), ] """ @pytest.mark.parametrize("params,ans", storage_test) def test_get_data_from_storage(params, ans): config = MythrilConfig() config.set_api_rpc_infura() disassembler = MythrilDisassembler(eth=config.eth, solc_version="0.4.23") outtext = disassembler.get_state_variable_from_storage( "0x76799f77587738bfeef09452df215b63d2cfb08a", params ).split("\n") assert outtext == ans storage_test_incorrect_params = [ (["1", "2", "3", "4"]), (["mapping", "1"]), (["a", "b", "c"]), ] @pytest.mark.parametrize("params", storage_test_incorrect_params) def test_get_data_from_storage_incorrect_params(params): config = MythrilConfig() config.set_api_rpc_infura() disassembler = MythrilDisassembler(eth=config.eth, solc_version="0.4.23") with pytest.raises(CriticalError): disassembler.get_state_variable_from_storage( "0x76799f77587738bfeef09452df215b63d2cfb08a", params ) """ def test_solc_install(): MythrilDisassembler(eth=None, solc_version="0.4.19") ================================================ FILE: tests/plugin/interface_test.py ================================================ from mythril.plugin.interface import MythrilCLIPlugin, MythrilPlugin def test_construct_cli_plugin(): _ = MythrilCLIPlugin() def test_construct_mythril_plugin(): _ = MythrilPlugin ================================================ FILE: tests/plugin/loader_test.py ================================================ import pytest from mythril.plugin import MythrilPlugin, MythrilPluginLoader from mythril.plugin.loader import UnsupportedPluginType def test_typecheck_load(): # Arrange loader = MythrilPluginLoader() # Act with pytest.raises(ValueError): loader.load(None) def test_unsupported_plugin_type(): # Arrange loader = MythrilPluginLoader() # Act with pytest.raises(UnsupportedPluginType): loader.load(MythrilPlugin()) ================================================ FILE: tests/pre-commit-hooks/Counter.sol ================================================ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.26; contract Counter { uint256 public number; function setNumber(uint256 newNumber) public { number = newNumber; } function increment() public { number++; } } ================================================ FILE: tests/pre-commit-hooks/test.sh ================================================ #!/usr/bin/env bash set -o errtrace -o nounset -o pipefail -o errexit SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" # Create temp working directory for mock repo MOCK_REPO=$(mktemp -d) if [[ ! "$MOCK_REPO" || ! -d "$MOCK_REPO" ]]; then echo "Could not create temp dir" exit 1 fi function cleanup { echo "Deleting temp working directory $MOCK_REPO" rm -rf "$MOCK_REPO" } trap cleanup EXIT # Filling the mock repo pushd "$MOCK_REPO" >/dev/null || exit 1 git init --initial-branch=master git config user.email "test@example.com" git config user.name "pre-commit test" cp "$SCRIPT_DIR/Counter.sol" . git add . git commit -m "Initial commit" # Run pre-commit inside the mock repo while referencing the mythril directory, # where the .pre-commit-hooks.yaml is located. pre-commit try-repo "$SCRIPT_DIR/../.." mythril --verbose --color=always --all-files ================================================ FILE: tests/rpc_test.py ================================================ from mythril.ethereum.interface.rpc.client import EthJsonRpc from tests import BaseTestCase class RpcTest(BaseTestCase): client = None def setUp(self): """""" self.client = EthJsonRpc() def tearDown(self): """""" self.client.close() def test_eth_blockNumber(self): block_number = self.client.eth_blockNumber() self.assertGreater( block_number, 0, "we have made sure the blockNumber is > 0 for testing" ) def test_eth_getBalance(self): balance = self.client.eth_getBalance( address="0x0000000000000000000000000000000000000000" ) self.assertGreater( balance, 10000000, "specified address should have a lot of balance" ) def test_eth_getStorageAt(self): storage = self.client.eth_getStorageAt( address="0x0000000000000000000000000000000000000000" ) self.assertEqual( storage, "0x0000000000000000000000000000000000000000000000000000000000000000", ) def test_eth_getBlockByNumber(self): block = self.client.eth_getBlockByNumber(0) self.assertEqual( block["extraData"], "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "the data of the first block should be right", ) def test_eth_getCode(self): # TODO: can't find a proper address for getting code code = self.client.eth_getCode( address="0x0000000000000000000000000000000000000001" ) self.assertEqual(code, "0x") def test_eth_getTransactionReceipt(self): transaction = self.client.eth_getTransactionReceipt( tx_hash="0xe363505adc6b2996111f8bd774f8653a61d244cc6567b5372c2e781c6c63b737" ) self.assertEqual( transaction["from"], "0x22f2dcff5ad78c3eb6850b5cb951127b659522e6" ) self.assertEqual( transaction["to"], "0x0000000000000000000000000000000000000000" ) ================================================ FILE: tests/solidity_contract_test.py ================================================ from pathlib import Path from mythril.mythril import MythrilDisassembler from mythril.solidity.soliditycontract import SolidityContract from tests import BaseTestCase TEST_FILES = Path(__file__).parent / "testdata/input_contracts" solc_binary = MythrilDisassembler._init_solc_binary("v0.5.0") class SolidityContractTest(BaseTestCase): def test_get_source_info_without_name_gets_latest_contract_info(self): input_file = TEST_FILES / "multi_contracts.sol" contract = SolidityContract(str(input_file), solc_binary=solc_binary) code_info = contract.get_source_info(116) self.assertEqual(code_info.filename, str(input_file)) self.assertEqual(code_info.lineno, 14) self.assertEqual(code_info.code, "msg.sender.transfer(2 ether)") def test_get_source_info_with_contract_name_specified(self): input_file = TEST_FILES / "multi_contracts.sol" contract = SolidityContract( str(input_file), name="Transfer1", solc_binary=solc_binary ) code_info = contract.get_source_info(116) self.assertEqual(code_info.filename, str(input_file)) self.assertEqual(code_info.lineno, 6) self.assertEqual(code_info.code, "msg.sender.transfer(1 ether)") def test_get_source_info_with_contract_name_specified_constructor(self): input_file = TEST_FILES / "constructor_assert.sol" contract = SolidityContract( str(input_file), name="AssertFail", solc_binary=solc_binary ) code_info = contract.get_source_info(75, constructor=True) self.assertEqual(code_info.filename, str(input_file)) self.assertEqual(code_info.lineno, 6) self.assertEqual(code_info.code, "assert(var1 > 0)") ================================================ FILE: tests/statespace_test.py ================================================ from types import SimpleNamespace from mythril.ethereum import util from mythril.mythril import MythrilAnalyzer, MythrilDisassembler from mythril.solidity.soliditycontract import EVMContract from tests import TESTDATA_INPUTS def test_statespace_dump(): for input_file in TESTDATA_INPUTS.iterdir(): if input_file.name not in ("origin.sol.o", "suicide.sol.o"): # It's too slow, so it's better to skip some tests. continue contract = EVMContract(input_file.read_text()) disassembler = MythrilDisassembler() disassembler.contracts.append(contract) args = SimpleNamespace( execution_timeout=5, max_depth=30, solver_timeout=10000, no_onchain_data=True, loop_bound=None, create_timeout=None, disable_dependency_pruning=False, custom_modules_directory=None, pruning_factor=0, parallel_solving=True, unconstrained_storage=True, call_depth_limit=3, disable_iprof=True, solver_log=None, transaction_sequences=None, disable_coverage_strategy=False, disable_mutation_pruner=False, enable_summaries=False, enable_state_merging=False, ) analyzer = MythrilAnalyzer( disassembler=disassembler, strategy="dfs", address=(util.get_indexed_address(0)), cmd_args=args, ) analyzer.dump_statespace(contract=contract) ================================================ FILE: tests/testdata/__init__.py ================================================ ================================================ FILE: tests/testdata/compile.py ================================================ # compile test contracts from pathlib import Path from mythril.solidity.soliditycontract import SolidityContract # Recompiles all the to be tested contracts root = Path(__file__).parent input = root / "input_contracts" output = root / "inputs" for contract in input.iterdir(): sol = SolidityContract(str(contract)) code = sol.code output_file = output / "{}.o".format(contract.name) output_file.write_text(code) ================================================ FILE: tests/testdata/concolic_io/multi_contract_example.sol ================================================ pragma solidity 0.8.6; /** * @title Storage * @dev Store & retrieve value in a variable */ contract D1 { uint256 number; function store(uint256 num) public { number =num; } function retval() public returns(uint256){ return number; } } contract D2 { uint256 number; function store(uint256 num) external { number = num; } function retval() public returns(uint256){ return number; } } contract D3 { D2 d2; D1 d1; constructor() public { d1 = D1(0x0901d12ebE1b195E5AA8748E62Bd7734aE19B51F); d2 = D2(0x384f682f4a5AbefC8795Cc38a340dE9446dFAE7A); } function test(uint256 num) public returns(uint256) { uint256 sum = d1.retval() + d2.retval() + num; if (sum == 10) { return sum + 10; } else if(sum == 25) { return sum * 2; } else return sum*10; return sum; } } ================================================ FILE: tests/testdata/concolic_io/multi_contract_example_input.json ================================================ { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x1000000", "code": "", "nonce": 0, "storage": {} }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": {} } } }, "steps": [{ "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636057361d1461003b5780639c88345314610057575b600080fd5b6100556004803603810190610050919061009d565b610075565b005b61005f61007f565b60405161006c91906100d9565b60405180910390f35b8060008190555050565b60008054905090565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea2646970667358221220773ac8f6769c8b896b1ac993a29718d8f1463998522b37ec8e410ded6f1bd3d464736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x0901d12ebE1b195E5AA8748E62Bd7734aE19B51F", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x6057361d0000000000000000000000000000000000000000000000000000000000000001", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636057361d1461003b5780639c88345314610057575b600080fd5b6100556004803603810190610050919061009d565b610075565b005b61005f61007f565b60405161006c91906100d9565b60405180910390f35b8060008190555050565b60008054905090565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea264697066735822122046b7cc08908c1d17c2b2b523dfb5fc5a50e56068ce85f705f6f75ff54c7b16c864736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x384f682f4a5AbefC8795Cc38a340dE9446dFAE7A", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x6057361d0000000000000000000000000000000000000000000000000000000000000001", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x608060405234801561001057600080fd5b50730901d12ebe1b195e5aa8748e62bd7734ae19b51f600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073384f682f4a5abefc8795cc38a340de9446dfae7a6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103f7806100c96000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806329e99f0714610030575b600080fd5b61004a60048036038101906100459190610238565b610060565b60405161005791906102a1565b60405180910390f35b6000808260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c8834536040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156100cc57600080fd5b505af11580156100e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101049190610265565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c8834536040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a69190610265565b6101b091906102bc565b6101ba91906102bc565b9050600a8114156101da57600a816101d291906102bc565b915050610209565b60198114156101f8576002816101f09190610312565b915050610209565b600a816102059190610312565b9150505b919050565b60008135905061021d816103aa565b92915050565b600081519050610232816103aa565b92915050565b60006020828403121561024e5761024d6103a5565b5b600061025c8482850161020e565b91505092915050565b60006020828403121561027b5761027a6103a5565b5b600061028984828501610223565b91505092915050565b61029b8161036c565b82525050565b60006020820190506102b66000830184610292565b92915050565b60006102c78261036c565b91506102d28361036c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561030757610306610376565b5b828201905092915050565b600061031d8261036c565b91506103288361036c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561036157610360610376565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6103b38161036c565b81146103be57600080fd5b5056fea2646970667358221220f0c85d3c193689a686ebf30f33bdac178593d7fe1036cce209c44c7833209cb464736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0xc538a4c3f414cbf7f78373e253c1beadd6310d45", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "0x29e99f070000000000000000000000000000000000000000000000000000000000000006", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x29e99f070000000000000000000000000000000000000000000000000000000000000006", "name": "", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }] } ================================================ FILE: tests/testdata/concolic_io/multiple_example.sol ================================================ // source of the bytecode, as a reference for the test. pragma solidity 0.8.6; contract Example1 { uint256 private initialized = 0; uint256 public count = 1; function init() public { initialized = 1; } function run(uint256 input, uint val) public { if (val == 3) { count += input; } else if(val == 5) { count += 2 * input; } else if(val == 7) { count += 10 + input; } else count++; } } ================================================ FILE: tests/testdata/concolic_io/multiple_example_input.json ================================================ { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x10000", "code": "", "nonce": 0, "storage": {} }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": {} } } }, "steps": [{ "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x6080604052600080556001805534801561001857600080fd5b50610349806100286000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd146100465780637357f5d214610064578063e1c7392a14610080575b600080fd5b61004e61008a565b60405161005b91906101aa565b60405180910390f35b61007e6004803603810190610079919061015b565b610090565b005b61008861013c565b005b60015481565b60038114156100b75781600160008282546100ab91906101c5565b92505081905550610138565b60058114156100ea578160026100cd919061021b565b600160008282546100de91906101c5565b92505081905550610137565b600781141561011d5781600a61010091906101c5565b6001600082825461011191906101c5565b92505081905550610136565b600160008154809291906101309061027f565b91905055505b5b5b5050565b6001600081905550565b600081359050610155816102fc565b92915050565b60008060408385031215610172576101716102f7565b5b600061018085828601610146565b925050602061019185828601610146565b9150509250929050565b6101a481610275565b82525050565b60006020820190506101bf600083018461019b565b92915050565b60006101d082610275565b91506101db83610275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156102105761020f6102c8565b5b828201905092915050565b600061022682610275565b915061023183610275565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561026a576102696102c8565b5b828202905092915050565b6000819050919050565b600061028a82610275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156102bd576102bc6102c8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b61030581610275565b811461031057600080fd5b5056fea26469706673582212202f9c24200282a71edb4cfb1018bca4a5608551f6bf5910ca1569133908c2605464736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "0x7357f5d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x7357f5d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "name": "run(uint256,uint256)", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }] } ================================================ FILE: tests/testdata/concolic_io/simple_example.sol ================================================ // source of the bytecode, as a reference for the test. pragma solidity 0.8.6; contract Example1 { uint256 private initialized = 0; uint256 public count = 1; function init() public { initialized = 1; } function run(uint256 input, uint val) public { if (val == 3) { count += input; } else count++; } } ================================================ FILE: tests/testdata/concolic_io/simple_example_input.json ================================================ { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x10000", "code": "", "nonce": 0, "storage": {} }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": {} } } }, "steps": [{ "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x6080604052600080556001805534801561001857600080fd5b50610287806100286000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd146100465780637357f5d214610064578063e1c7392a14610080575b600080fd5b61004e61008a565b60405161005b9190610142565b60405180910390f35b61007e600480360381019061007991906100f3565b610090565b005b6100886100d4565b005b60015481565b60038114156100b75781600160008282546100ab919061015d565b925050819055506100d0565b600160008154809291906100ca906101bd565b91905055505b5050565b6001600081905550565b6000813590506100ed8161023a565b92915050565b6000806040838503121561010a57610109610235565b5b6000610118858286016100de565b9250506020610129858286016100de565b9150509250929050565b61013c816101b3565b82525050565b60006020820190506101576000830184610133565b92915050565b6000610168826101b3565b9150610173836101b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101a8576101a7610206565b5b828201905092915050565b6000819050919050565b60006101c8826101b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156101fb576101fa610206565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b610243816101b3565b811461024e57600080fd5b5056fea2646970667358221220de20d82abee4e4f81661465126dda93179255f9249d58bde7c3ea5f5f8bc3dbb64736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x901d12ebe1b195e5aa8748e62bd7734ae19b51f", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "0x7357f5d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x7357f5d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "name": "run(uint256,uint256)", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }] } ================================================ FILE: tests/testdata/concolic_io/two_contract.sol ================================================ pragma solidity 0.8.6; /** * @title Storage * @dev Store & retrieve value in a variable */ contract D1 { uint256 number; function store(uint256 num) public { assert(num < 5); number =num; } function retval() public returns(uint256){ return number; } } contract D2 { D1 d1; constructor() public { d1 = D1(0x0901d12ebE1b195E5AA8748E62Bd7734aE19B51F); } function test(uint256 num) public returns(uint256) { uint256 sum = d1.retval() + num; if (sum == 10) { return sum + 10; } else if(sum == 11) { return sum + 12; } else if(sum == 30) { return sum * 2; } assert(sum != 20); return sum; } } ================================================ FILE: tests/testdata/concolic_io/two_contract_input.json ================================================ { "initialState": { "accounts": { "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe": { "balance": "0x10000000000000000000000000000", "code": "", "nonce": 0, "storage": {} }, "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": { "balance": "0x0", "code": "", "nonce": 0, "storage": {} } } }, "steps": [{ "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x608060405234801561001057600080fd5b50610190806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636057361d1461003b5780639c88345314610057575b600080fd5b610055600480360381019061005091906100ae565b610075565b005b61005f610090565b60405161006c91906100ea565b60405180910390f35b600581106100865761008561010f565b5b8060008190555050565b60008054905090565b6000813590506100a881610143565b92915050565b6000602082840312156100c4576100c361013e565b5b60006100d284828501610099565b91505092915050565b6100e481610105565b82525050565b60006020820190506100ff60008301846100db565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080fd5b61014c81610105565b811461015757600080fd5b5056fea26469706673582212200d02c19e8a2bae5958a822a8cfde054e94c216f2113e4b13c9dfcebaa7fd6d1564736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x0901d12ebE1b195E5AA8748E62Bd7734aE19B51F", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x6057361d0000000000000000000000000000000000000000000000000000000000000001", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x608060405234801561001057600080fd5b50730901d12ebe1b195e5aa8748e62bd7734ae19b51f6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061039e806100746000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806329e99f0714610030575b600080fd5b61004a600480360381019061004591906101b0565b610060565b6040516100579190610219565b60405180910390f35b6000808260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c8834536040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156100cc57600080fd5b505af11580156100e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010491906101dd565b61010e9190610234565b9050600a81141561012e57600a816101269190610234565b915050610181565b600b81141561014c57600c816101449190610234565b915050610181565b601e81141561016a57600281610162919061028a565b915050610181565b601481141561017c5761017b6102ee565b5b809150505b919050565b60008135905061019581610351565b92915050565b6000815190506101aa81610351565b92915050565b6000602082840312156101c6576101c561034c565b5b60006101d484828501610186565b91505092915050565b6000602082840312156101f3576101f261034c565b5b60006102018482850161019b565b91505092915050565b610213816102e4565b82525050565b600060208201905061022e600083018461020a565b92915050565b600061023f826102e4565b915061024a836102e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561027f5761027e61031d565b5b828201905092915050565b6000610295826102e4565b91506102a0836102e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156102d9576102d861031d565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b61035a816102e4565b811461036557600080fd5b5056fea26469706673582212205af1f2d3a496abf9b24e8953ec8c2869d565a0a6057c1ff82097fbff424f6e3464736f6c63430008060033", "name": "unknown", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }, { "address": "0x384f682f4a5AbefC8795Cc38a340dE9446dFAE7A", "blockCoinbase": "0xcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb", "blockDifficulty": "0xa7d7343662e26", "blockGasLimit": "0x7d0000", "blockNumber": "0x66e393", "blockTime": "0x5bfa4639", "calldata": "0x29e99f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x7d000", "gasPrice": "0x773594000", "input": "0x29e99f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "name": "", "origin": "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe", "value": "0x0" }] } ================================================ FILE: tests/testdata/input_contracts/SecureVault.sol ================================================ pragma solidity ^0.8.20; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract SecureVault is Ownable { // Event to emit when Ether is deposited event Deposit(address indexed sender, uint256 amount); // Event to emit when Ether is withdrawn event Withdrawal(address indexed to, uint256 amount); // Constructor that sets the initial owner of the SecureVault constructor(address initialOwner) Ownable(initialOwner) {} // Function to deposit Ether into the contract. Anybody can deposit. function deposit() external payable { require(msg.value > 0, "Cannot deposit 0 Ether"); emit Deposit(_msgSender(), msg.value); } // Function that allows only the owner to withdraw Ether from the contract. function withdraw(uint256 amount) external onlyOwner { require(address(this).balance >= amount, "Insufficient balance to withdraw"); payable(owner()).transfer(amount); emit Withdrawal(owner(), amount); } // Function to check the balance of the contract. function getBalance() external view returns (uint256) { return address(this).balance; } } ================================================ FILE: tests/testdata/input_contracts/SimpleModifier.sol ================================================ pragma solidity ^0.5.0; contract SimpleModifier { address payable public owner; modifier onlyOwner() { require(msg.sender == owner); _; } function withdrawfunds() public onlyOwner { owner.send(address(this).balance); } } ================================================ FILE: tests/testdata/input_contracts/WalletLibrary.sol ================================================ //sol Wallet // Multi-sig, daily-limited account proxy/wallet. // @authors: // Gav Wood // inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a // single, or, crucially, each of a number of, designated owners. // usage: // use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by // some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the // interior is executed. pragma solidity 0.5.0; contract WalletEvents { // EVENTS // this contract only has six types of events: it can accept a confirmation, in which case // we record owner and operation (hash) alongside it. event Confirmation(address owner, bytes32 operation); event Revoke(address owner, bytes32 operation); // some others are in the case of an owner changing. event OwnerChanged(address oldOwner, address newOwner); event OwnerAdded(address newOwner); event OwnerRemoved(address oldOwner); // the last one is emitted if the required signatures change event RequirementChanged(uint newRequirement); // Funds has arrived into the wallet (record how much). event Deposit(address _from, uint value); // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going). event SingleTransact(address owner, uint value, address to, bytes data, address created); // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going). event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data, address created); // Confirmation still needed for a transaction. event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data); } contract WalletAbi { // Revokes a prior confirmation of the given operation function revoke(bytes32 _operation) external; // Replaces an owner `_from` with another `_to`. function changeOwner(address _from, address _to) external; function addOwner(address _owner) external; function removeOwner(address _owner) external; function changeRequirement(uint _newRequired) external; function isOwner(address _addr) public returns (bool); function hasConfirmed(bytes32 _operation, address _owner) external returns (bool); // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. function setDailyLimit(uint _newLimit) external; function execute(address _to, uint _value, bytes calldata _data) external returns (bytes32 o_hash); function confirm(bytes32 _h) public returns (bool o_success); } contract WalletLibrary is WalletEvents { // TYPES // struct for the status of a pending operation. struct PendingState { uint yetNeeded; uint ownersDone; uint index; } // Transaction structure to remember details of transaction lest it need be saved for a later call. struct Transaction { address to; uint value; bytes data; } // MODIFIERS // simple single-sig function modifier. modifier onlyowner { if (isOwner(msg.sender)) _; } // multi-sig function modifier: the operation must have an intrinsic hash in order // that later attempts can be realised as the same underlying operation and // thus count as confirmations. modifier onlymanyowners(bytes32 _operation) { if (confirmAndCheck(_operation)) _; } // METHODS // gets called when no other function matches function() external payable { // just being sent some cash? if (msg.value > 0) emit Deposit(msg.sender, msg.value); } // constructor is given number of sigs required to do protected "onlymanyowners" transactions // as well as the selection of addresses capable of confirming them. function initMultiowned(address[] memory _owners, uint _required) public only_uninitialized { m_numOwners = _owners.length + 1; m_owners[1] = uint(msg.sender); m_ownerIndex[uint(msg.sender)] = 1; for (uint i = 0; i < _owners.length; ++i) { m_owners[2 + i] = uint(_owners[i]); m_ownerIndex[uint(_owners[i])] = 2 + i; } m_required = _required; } // Revokes a prior confirmation of the given operation function revoke(bytes32 _operation) external { uint ownerIndex = m_ownerIndex[uint(msg.sender)]; // make sure they're an owner if (ownerIndex == 0) return; uint ownerIndexBit = 2**ownerIndex; PendingState memory pending = m_pending[_operation]; if (pending.ownersDone & ownerIndexBit > 0) { pending.yetNeeded++; pending.ownersDone -= ownerIndexBit; emit Revoke(msg.sender, _operation); } } // Replaces an owner `_from` with another `_to`. function changeOwner(address _from, address _to) onlymanyowners(keccak256(msg.data)) external { if (isOwner(_to)) return; uint ownerIndex = m_ownerIndex[uint(_from)]; if (ownerIndex == 0) return; clearPending(); m_owners[ownerIndex] = uint(_to); m_ownerIndex[uint(_from)] = 0; m_ownerIndex[uint(_to)] = ownerIndex; emit OwnerChanged(_from, _to); } function addOwner(address _owner) onlymanyowners(keccak256(msg.data)) external { if (isOwner(_owner)) return; clearPending(); if (m_numOwners >= c_maxOwners) reorganizeOwners(); if (m_numOwners >= c_maxOwners) return; m_numOwners++; m_owners[m_numOwners] = uint(_owner); m_ownerIndex[uint(_owner)] = m_numOwners; emit OwnerAdded(_owner); } function removeOwner(address _owner) onlymanyowners(keccak256(msg.data)) external { uint ownerIndex = m_ownerIndex[uint(_owner)]; if (ownerIndex == 0) return; if (m_required > m_numOwners - 1) return; m_owners[ownerIndex] = 0; m_ownerIndex[uint(_owner)] = 0; clearPending(); reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot emit OwnerRemoved(_owner); } function changeRequirement(uint _newRequired) onlymanyowners(keccak256(msg.data)) external { if (_newRequired > m_numOwners) return; m_required = _newRequired; clearPending(); emit RequirementChanged(_newRequired); } // Gets an owner by 0-indexed position (using numOwners as the count) function getOwner(uint ownerIndex) external view returns (address) { return address(m_owners[ownerIndex + 1]); } function isOwner(address _addr) public view returns (bool) { return m_ownerIndex[uint(_addr)] > 0; } function hasConfirmed(bytes32 _operation, address _owner) external view returns (bool) { PendingState memory pending = m_pending[_operation]; uint ownerIndex = m_ownerIndex[uint(_owner)]; // make sure they're an owner if (ownerIndex == 0) return false; // determine the bit to set for this owner. uint ownerIndexBit = 2**ownerIndex; return !(pending.ownersDone & ownerIndexBit == 0); } // constructor - stores initial daily limit and records the present day's index. function initDaylimit(uint _limit) public only_uninitialized { m_dailyLimit = _limit; m_lastDay = today(); } // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. function setDailyLimit(uint _newLimit) onlymanyowners(keccak256(msg.data)) external { m_dailyLimit = _newLimit; } // resets the amount already spent today. needs many of the owners to confirm. function resetSpentToday() onlymanyowners(keccak256(msg.data)) external { m_spentToday = 0; } // throw unless the contract is not yet initialized. modifier only_uninitialized { require(m_numOwners == 0); _; } // constructor - just pass on the owner array to the multiowned and // the limit to daylimit function initWallet(address[] memory _owners, uint _required, uint _daylimit) public only_uninitialized { initDaylimit(_daylimit); initMultiowned(_owners, _required); } // kills the contract sending everything to `_to`. function kill(address payable _to) onlymanyowners(keccak256(msg.data)) external { selfdestruct(_to); } // Outside-visible transact entry point. Executes transaction immediately if below daily spend limit. // If not, goes into multisig process. We provide a hash on return to allow the sender to provide // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value // and _data arguments). They still get the option of using them if they want, anyways. function execute(address _to, uint _value, bytes calldata _data) external onlyowner returns (bytes32 o_hash) { // first, take the opportunity to check that we're under the daily limit. if ((_data.length == 0 && underLimit(_value)) || m_required == 1) { // yes - just execute the call. address created; if (_to == address(0)) { created = create(_value, _data); } else { (bool success, bytes memory data) = _to.call.value(_value)(_data); require(success); } emit SingleTransact(msg.sender, _value, _to, _data, created); } else { // determine our operation hash. o_hash = keccak256(abi.encode(msg.data, block.number)); // store if it's new if (m_txs[o_hash].to == address(0) && m_txs[o_hash].value == 0 && m_txs[o_hash].data.length == 0) { m_txs[o_hash].to = _to; m_txs[o_hash].value = _value; m_txs[o_hash].data = _data; } if (!confirm(o_hash)) { emit ConfirmationNeeded(o_hash, msg.sender, _value, _to, _data); } } } function create(uint _value, bytes memory _code) internal returns (address o_addr) { uint256 o_size; assembly { o_addr := create(_value, add(_code, 0x20), mload(_code)) o_size := extcodesize(o_addr) } require(o_size != 0); } // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order // to determine the body of the transaction from the hash provided. function confirm(bytes32 _h) public onlymanyowners(_h) returns (bool o_success) { if (m_txs[_h].to != address(0) || m_txs[_h].value != 0 || m_txs[_h].data.length != 0) { address created; if (m_txs[_h].to == address(0)) { created = create(m_txs[_h].value, m_txs[_h].data); } else { (bool success, bytes memory data) = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data); require(success); } emit MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data, created); delete m_txs[_h]; return true; } } // INTERNAL METHODS function confirmAndCheck(bytes32 _operation) internal returns (bool) { // determine what index the present sender is: uint ownerIndex = m_ownerIndex[uint(msg.sender)]; // make sure they're an owner if (ownerIndex == 0) return false; PendingState memory pending = m_pending[_operation]; // if we're not yet working on this operation, switch over and reset the confirmation status. if (pending.yetNeeded == 0) { // reset count of confirmations needed. pending.yetNeeded = m_required; // reset which owners have confirmed (none) - set our bitmap to 0. pending.ownersDone = 0; pending.index = m_pendingIndex.length++; m_pendingIndex[pending.index] = _operation; } // determine the bit to set for this owner. uint ownerIndexBit = 2**ownerIndex; // make sure we (the message sender) haven't confirmed this operation previously. if (pending.ownersDone & ownerIndexBit == 0) { emit Confirmation(msg.sender, _operation); // ok - check if count is enough to go ahead. if (pending.yetNeeded <= 1) { // enough confirmations: reset and run interior. delete m_pendingIndex[m_pending[_operation].index]; delete m_pending[_operation]; return true; } else { // not enough: record that this owner in particular confirmed. pending.yetNeeded--; pending.ownersDone |= ownerIndexBit; } } } function reorganizeOwners() private { uint free = 1; while (free < m_numOwners) { while (free < m_numOwners && m_owners[free] != 0) free++; while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--; if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0) { m_owners[free] = m_owners[m_numOwners]; m_ownerIndex[m_owners[free]] = free; m_owners[m_numOwners] = 0; } } } // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and // returns true. otherwise just returns false. function underLimit(uint _value) internal onlyowner returns (bool) { // reset the spend limit if we're on a different day to last time. if (today() > m_lastDay) { m_spentToday = 0; m_lastDay = today(); } // check to see if there's enough left - if so, subtract and return true. // overflow protection // dailyLimit check if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) { m_spentToday += _value; return true; } return false; } // determines today's index. function today() private view returns (uint) { return now / 1 days; } function clearPending() internal { uint length = m_pendingIndex.length; for (uint i = 0; i < length; ++i) { delete m_txs[m_pendingIndex[i]]; if (m_pendingIndex[i] != 0) delete m_pending[m_pendingIndex[i]]; } delete m_pendingIndex; } // FIELDS address _walletLibrary = 0xCAfEcAfeCAfECaFeCaFecaFecaFECafECafeCaFe; // the number of owners that must confirm the same operation before it is run. uint public m_required; // pointer used to find a free slot in m_owners uint public m_numOwners; uint public m_dailyLimit; uint public m_spentToday; uint public m_lastDay; // list of owners uint[256] m_owners; uint c_maxOwners = 250; // index on the list of owners to allow reverse lookup mapping(uint => uint) m_ownerIndex; // the ongoing operations. mapping(bytes32 => PendingState) m_pending; bytes32[] m_pendingIndex; // pending transactions we have at present. mapping (bytes32 => Transaction) m_txs; } ================================================ FILE: tests/testdata/input_contracts/base_case.sol ================================================ contract B{ uint x=0; function incr() public returns(uint){ require(x==0); x += 1; } function incr2() public payable returns(uint){ require(x==1); x += 1; } function continous_incr() public payable returns(uint){ require(x>=2); x += 1; } function destroy() public returns(uint){ selfdestruct(msg.sender); } } ================================================ FILE: tests/testdata/input_contracts/calls.sol ================================================ pragma solidity ^0.5.0; contract Caller { address public fixed_address; address public stored_address; uint256 statevar; constructor(address addr) public { fixed_address = address(0x552254CbAaF32613C6c0450CF19524594eF84044); } function thisisfine() public { fixed_address.call(""); } function reentrancy() public { fixed_address.call(""); statevar = 0; } function calluseraddress(address addr) public { addr.call(""); } function callstoredaddress() public { stored_address.call(""); statevar = 0; } function setstoredaddress(address addr) public { stored_address = addr; } } ================================================ FILE: tests/testdata/input_contracts/complex.sol ================================================ pragma solidity 0.5.0; contract WalletLibrary { struct PendingState { uint yetNeeded; uint ownersDone; uint index; } struct Transaction { address to; uint value; bytes data; } modifier onlymanyowners(bytes32 _operation) { if (confirmAndCheck(_operation)) _; } function initMultiowned(address[] memory _owners, uint _required) public only_uninitialized { m_numOwners = _owners.length + 1; m_owners[1] = uint(msg.sender); m_ownerIndex[uint(msg.sender)] = 1; for (uint i = 0; i < _owners.length; ++i) { m_owners[2 + i] = uint(_owners[i]); m_ownerIndex[uint(_owners[i])] = 2 + i; } m_required = _required; } modifier only_uninitialized { require(m_numOwners == 0); _; } function kill(address payable _to) onlymanyowners(keccak256(msg.data)) external { selfdestruct(_to); } function confirmAndCheck(bytes32 _operation) internal returns (bool) { uint ownerIndex = m_ownerIndex[uint(msg.sender)]; if (ownerIndex == 0) return false; PendingState memory pending = m_pending[_operation]; if (pending.yetNeeded == 0) { pending.yetNeeded = m_required; pending.ownersDone = 0; pending.index = m_pendingIndex.length++; m_pendingIndex[pending.index] = _operation; } uint ownerIndexBit = 2**ownerIndex; if (pending.ownersDone & ownerIndexBit == 0) { if (pending.yetNeeded <= 1) { delete m_pendingIndex[m_pending[_operation].index]; delete m_pending[_operation]; return true; } else { // not enough: record that this owner in particular confirmed. pending.yetNeeded--; pending.ownersDone |= ownerIndexBit; } } } uint public m_required; uint public m_numOwners; // list of owners uint[256] m_owners; mapping(uint => uint) m_ownerIndex; mapping(bytes32 => PendingState) m_pending; bytes32[] m_pendingIndex; } ================================================ FILE: tests/testdata/input_contracts/constructor_assert.sol ================================================ pragma solidity ^0.5.0; contract AssertFail { constructor(uint8 var1) public { assert(var1 > 0); } } ================================================ FILE: tests/testdata/input_contracts/destruct.sol ================================================ pragma solidity 0.5.0; contract WalletLibrary { struct PendingState { uint yetNeeded; uint ownersDone; uint index; } struct Transaction { address to; uint value; bytes data; } modifier onlymanyowners(bytes32 _operation) { if (confirmAndCheck(_operation)) _; } function initMultiowned(address[] memory _owners, uint _required) public only_uninitialized { m_numOwners = _owners.length + 1; m_owners[1] = uint(msg.sender); m_ownerIndex[uint(msg.sender)] = 1; for (uint i = 0; i < _owners.length; ++i) { m_owners[2 + i] = uint(_owners[i]); m_ownerIndex[uint(_owners[i])] = 2 + i; } m_required = _required; } modifier only_uninitialized { require(m_numOwners == 0); _; } function kill(address payable _to) onlymanyowners(keccak256(msg.data)) external { selfdestruct(_to); } function confirmAndCheck(bytes32 _operation) internal returns (bool) { uint ownerIndex = m_ownerIndex[uint(msg.sender)]; if (ownerIndex == 0) return false; PendingState memory pending = m_pending[_operation]; if (pending.yetNeeded == 0) { pending.yetNeeded = m_required; pending.ownersDone = 0; pending.index = m_pendingIndex.length++; m_pendingIndex[pending.index] = _operation; } uint ownerIndexBit = 2**ownerIndex; if (pending.ownersDone & ownerIndexBit == 0) { if (pending.yetNeeded <= 1) { delete m_pendingIndex[m_pending[_operation].index]; delete m_pending[_operation]; return true; } else { // not enough: record that this owner in particular confirmed. pending.yetNeeded--; pending.ownersDone |= ownerIndexBit; } } } uint public m_required; uint public m_numOwners; // list of owners uint[256] m_owners; mapping(uint => uint) m_ownerIndex; mapping(bytes32 => PendingState) m_pending; bytes32[] m_pendingIndex; } ================================================ FILE: tests/testdata/input_contracts/destruct_crlf.sol ================================================ pragma solidity ^0.5.0; contract Suicide { function kill(address payable addr) public { selfdestruct(addr); } } ================================================ FILE: tests/testdata/input_contracts/environments.sol ================================================ pragma solidity ^0.5.0; contract IntegerOverflow2 { uint256 public count = 7; mapping(address => uint256) balances; function batchTransfer(address[] memory _receivers, uint256 _value) public returns(bool){ uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); balances[msg.sender] -=amount; return true; } } ================================================ FILE: tests/testdata/input_contracts/ether_send.sol ================================================ pragma solidity ^0.5.0; contract Crowdfunding { mapping(address => uint) public balances; address public owner; uint256 INVEST_MIN = 1 ether; uint256 INVEST_MAX = 10 ether; modifier onlyOwner() { require(msg.sender == owner); _; } function crowdfunding() public { owner = msg.sender; } function withdrawfunds() public onlyOwner { msg.sender.transfer(address(this).balance); } function invest() public payable { require(msg.value > INVEST_MIN && msg.value < INVEST_MAX); balances[msg.sender] += msg.value; } function getBalance() public view returns (uint) { return balances[msg.sender]; } } ================================================ FILE: tests/testdata/input_contracts/exceptions.sol ================================================ pragma solidity ^0.5.0; contract Exceptions { uint256[8] myarray; function assert1() public pure { uint256 i = 1; assert(i == 0); } function assert2() public pure { uint256 i = 1; assert(i > 0); } function assert3(uint256 input) public pure { if (input > 10) { assert(input != 23); } } function requireisfine(uint256 input) public pure { require(input != 23); } function divisionby0(uint256 input) public pure { uint256 i = 1/input; } function thisisfine(uint256 input) public pure { if (input > 0) { uint256 i = 1/input; } } function arrayaccess(uint256 index) public view { uint256 i = myarray[index]; } function thisisalsofind(uint256 index) public view { if (index < 8) { uint256 i = myarray[index]; } } } ================================================ FILE: tests/testdata/input_contracts/exceptions_0.8.0.sol ================================================ pragma solidity ^0.8.0; contract Exceptions { uint val; function change_val() public { val = 1; } function assert1() public pure { uint256 i = 1; assert(i == 0); } function fail() public view { assert(val==2); } } ================================================ FILE: tests/testdata/input_contracts/extcall.sol ================================================ pragma solidity ^0.6.0; interface IERC20 { function transfer(address to, uint256 amount) external returns (bool); } contract A { constructor() public { /// nothing detected address(0).call(""); IERC20(address(0)).transfer(address(0), 0); assert(false); } } ================================================ FILE: tests/testdata/input_contracts/flag_array.sol ================================================ pragma solidity ^0.8.0; contract BasicLiquidation { bool[4096] _flags; constructor() payable { require(msg.value == 0.1 ether); _flags[1234] = true; } function extractMoney(uint256 idx) public payable { require(idx >= 0); require(idx < 4096); require(_flags[idx]); payable(msg.sender).transfer(address(this).balance); } } ================================================ FILE: tests/testdata/input_contracts/hash_test.sol ================================================ contract StorageTest { mapping(bytes32 => address) data; function confirmAndCheck(uint256 x) public{ data[keccak256(abi.encodePacked(x))] = msg.sender; } function destruct(bytes32 x) public{ require(data[x] == msg.sender); selfdestruct(data[x]); } } ================================================ FILE: tests/testdata/input_contracts/integer_edge_case.sol ================================================ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; contract B { function f(uint256 arg) public view returns(uint256) { uint256 res; unchecked{ res = 10_000_000_000 * arg; // undetected overflow } //assert(res > arg); // the assertion violation is correctly detected if added return res; } } ================================================ FILE: tests/testdata/input_contracts/kcalls.sol ================================================ pragma solidity ^0.5.0; contract Kcalls { uint public n; address public sender; function callSetN(address _e, uint _n) public { _e.call(abi.encode(bytes4(keccak256("setN(uint256)")), _n)); } function callcodeSetN(address _e, uint _n) public view { _e.staticcall(abi.encode(bytes4(keccak256("setN(uint256)")), _n)); } function delegatecallSetN(address _e, uint _n) public { _e.delegatecall(abi.encode(bytes4(keccak256("setN(uint256)")), _n)); } } ================================================ FILE: tests/testdata/input_contracts/large.sol ================================================ contract B{ uint x=0; uint total=0; function incr() public returns(uint){ x += 1; } function foo() public returns(uint){ require(x==10); selfdestruct(msg.sender); } } ================================================ FILE: tests/testdata/input_contracts/metacoin.sol ================================================ pragma solidity ^0.5.0; contract MetaCoin { mapping (address => uint) public balances; constructor() public { balances[msg.sender] = 10000; } function sendToken(address receiver, uint amount) public returns(bool successful){ if (balances[msg.sender] < amount) return false; balances[msg.sender] -= amount; balances[receiver] += amount; return false; } } ================================================ FILE: tests/testdata/input_contracts/multi_contracts.sol ================================================ pragma solidity ^0.5.0; contract Transfer1 { function transfer() public { msg.sender.transfer(1 ether); } } contract Transfer2 { function transfer() public { msg.sender.transfer(2 ether); } } ================================================ FILE: tests/testdata/input_contracts/nonascii.sol ================================================ pragma solidity ^0.5.0; contract nonAscii { function renderNonAscii () public pure returns (string memory) { return "Хэллоу Ворлд"; } } ================================================ FILE: tests/testdata/input_contracts/old_origin.sol ================================================ pragma solidity ^0.4.11; contract Origin { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Origin() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(tx.origin != owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } ================================================ FILE: tests/testdata/input_contracts/old_version.sol ================================================ pragma solidity 0.4.11; contract test { } ================================================ FILE: tests/testdata/input_contracts/origin.sol ================================================ pragma solidity ^0.5.0; contract Origin { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(tx.origin != owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } ================================================ FILE: tests/testdata/input_contracts/overflow.sol ================================================ pragma solidity ^0.5.0; contract Over { mapping(address => uint) balances; uint public totalSupply; constructor(uint _initialSupply) public { balances[msg.sender] = totalSupply = _initialSupply; } function sendeth(address _to, uint _value) public returns (bool) { require(balances[msg.sender] - _value >= 0); balances[msg.sender] -= _value; balances[_to] += _value; return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } } ================================================ FILE: tests/testdata/input_contracts/regression_1.sol ================================================ pragma solidity ^0.8.0; contract Regression_1 { mapping (address => uint256) private userBalances; uint256 public constant TOKEN_PRICE = 1 ether; string public constant name = "Moon Token"; string public constant symbol = "MOON"; // The token is non-divisible // You can buy/sell/transfer 1, 2, 3, or 46 tokens but not 33.5 uint8 public constant decimals = 0; uint256 public totalSupply; function buy(uint256 _amount) external payable { require( msg.value == _amount * TOKEN_PRICE, "Ether submitted and Token amount to buy mismatch" ); userBalances[msg.sender] += _amount; totalSupply += _amount; } function sell(uint256 _amount) external { require(userBalances[msg.sender] >= _amount, "Insufficient balance"); userBalances[msg.sender] -= _amount; totalSupply -= _amount; (bool success, ) = msg.sender.call{value: _amount * TOKEN_PRICE}(""); require(success, "Failed to send Ether"); assert(getEtherBalance() == totalSupply * TOKEN_PRICE); } function transfer(address _to, uint256 _amount) external { require(_to != address(0), "_to address is not valid"); require(userBalances[msg.sender] >= _amount, "Insufficient balance"); userBalances[msg.sender] -= _amount; userBalances[_to] += _amount; } function getEtherBalance() public view returns (uint256) { return address(this).balance; } function getUserBalance(address _user) external view returns (uint256) { return userBalances[_user]; } } ================================================ FILE: tests/testdata/input_contracts/requirements_violation_neg.sol ================================================ pragma solidity ^0.4.25; contract Bar { Foo private f = new Foo(); function doubleBaz() public view returns (int256) { return 2 * f.baz(1); //Changes the external contract to not hit the overly strong requirement. } } contract Foo { function baz(int256 x) public pure returns (int256) { require(0 < x); //You can also fix the contract by changing the input to the uint type and removing the require return 42; } } ================================================ FILE: tests/testdata/input_contracts/requirements_violation_pos.sol ================================================ pragma solidity ^0.4.25; contract Bar { Foo private f = new Foo(); function doubleBaz() public view returns (int256) { return 2 * f.baz(0); } } contract Foo { function baz(int256 x) public pure returns (int256) { require(0 < x); return 42; } } ================================================ FILE: tests/testdata/input_contracts/returnvalue.sol ================================================ pragma solidity ^0.5.0; contract ReturnValue { address public callee = 0xE0f7e56E62b4267062172495D7506087205A4229; function callnotchecked() public { callee.call(""); } function callchecked() public { (bool success, bytes memory data) = callee.call(""); require(success); } } ================================================ FILE: tests/testdata/input_contracts/rubixi.sol ================================================ pragma solidity ^0.5.0; contract Rubixi { //Declare variables for storage critical to contract uint private balance = 0; uint private collectedFees = 0; uint private feePercent = 10; uint private pyramidMultiplier = 300; uint private payoutOrder = 0; address payable private creator; modifier onlyowner { if (msg.sender == creator) _; } struct Participant { address payable etherAddress; uint payout; } //Fallback function function() external payable { init(); } //Sets creator function dynamicPyramid() public { creator = msg.sender; } Participant[] private participants; //Fee functions for creator function collectAllFees() public onlyowner { require(collectedFees == 0); creator.transfer(collectedFees); collectedFees = 0; } function collectFeesInEther(uint _amt) public onlyowner { _amt *= 1 ether; if (_amt > collectedFees) collectAllFees(); require(collectedFees == 0); creator.transfer(_amt); collectedFees -= _amt; } function collectPercentOfFees(uint _pcent) public onlyowner { require(collectedFees == 0 || _pcent > 100); uint feesToCollect = collectedFees / 100 * _pcent; creator.transfer(feesToCollect); collectedFees -= feesToCollect; } //Functions for changing variables related to the contract function changeOwner(address payable _owner) public onlyowner { creator = _owner; } function changeMultiplier(uint _mult) public onlyowner { require(_mult > 300 || _mult < 120); pyramidMultiplier = _mult; } function changeFeePercentage(uint _fee) public onlyowner { require(_fee > 10); feePercent = _fee; } //Functions to provide information to end-user using JSON interface or other interfaces function currentMultiplier() public view returns (uint multiplier, string memory info) { multiplier = pyramidMultiplier; info = "This multiplier applies to you as soon as transaction is received, may be lowered to hasten payouts or increased if payouts are fast enough. Due to no float or decimals, multiplier is x100 for a fractional multiplier e.g. 250 is actually a 2.5x multiplier. Capped at 3x max and 1.2x min."; } function currentFeePercentage() public view returns (uint fee, string memory info) { fee = feePercent; info = "Shown in % form. Fee is halved(50%) for amounts equal or greater than 50 ethers. (Fee may change, but is capped to a maximum of 10%)"; } function currentPyramidBalanceApproximately() public view returns (uint pyramidBalance, string memory info) { pyramidBalance = balance / 1 ether; info = "All balance values are measured in Ethers, note that due to no decimal placing, these values show up as integers only, within the contract itself you will get the exact decimal value you are supposed to"; } function nextPayoutWhenPyramidBalanceTotalsApproximately() public view returns (uint balancePayout) { balancePayout = participants[payoutOrder].payout / 1 ether; } function feesSeperateFromBalanceApproximately() public view returns (uint fees) { fees = collectedFees / 1 ether; } function totalParticipants() public view returns (uint count) { count = participants.length; } function numberOfParticipantsWaitingForPayout() public view returns (uint count) { count = participants.length - payoutOrder; } function participantDetails(uint orderInPyramid) public view returns (address addr, uint payout) { if (orderInPyramid <= participants.length) { addr = participants[orderInPyramid].etherAddress; payout = participants[orderInPyramid].payout / 1 ether; } } //init function run on fallback function init() private { //Ensures only tx with value of 1 ether or greater are processed and added to pyramid if (msg.value < 1 ether) { collectedFees += msg.value; return; } uint _fee = feePercent; // 50% fee rebate on any ether value of 50 or greater if (msg.value >= 50 ether) _fee /= 2; addPayout(_fee); } //Function called for valid tx to the contract function addPayout(uint _fee) private { //Adds new address to participant array participants.push(Participant(msg.sender, (msg.value * pyramidMultiplier) / 100)); // These statements ensure a quicker payout system to // later pyramid entrants, so the pyramid has a longer lifespan if (participants.length == 10) pyramidMultiplier = 200; else if (participants.length == 25) pyramidMultiplier = 150; // collect fees and update contract balance balance += (msg.value * (100 - _fee)) / 100; collectedFees += (msg.value * _fee) / 100; //Pays earlier participants if balance sufficient while (balance > participants[payoutOrder].payout) { uint payoutToSend = participants[payoutOrder].payout; participants[payoutOrder].etherAddress.transfer(payoutToSend); balance -= participants[payoutOrder].payout; payoutOrder += 1; } } } ================================================ FILE: tests/testdata/input_contracts/safe_funcs.sol ================================================ pragma solidity ^0.8.0; contract Exceptions { uint val; function change_val() public { val = 1; } function assert1() public pure { uint256 i = 1; assert(i == 0); } function fail() public view { assert(val==2); } } ================================================ FILE: tests/testdata/input_contracts/simple_theft.sol ================================================ pragma solidity ^0.8.0; contract Fallback { function withdraw() public { payable(msg.sender).transfer(address(this).balance); } } ================================================ FILE: tests/testdata/input_contracts/suicide.sol ================================================ pragma solidity ^0.5.0; contract Suicide { function kill(address payable addr) public { selfdestruct(addr); } } ================================================ FILE: tests/testdata/input_contracts/symbolic_exec_bytecode.sol ================================================ pragma solidity ^0.8.0; contract Test { uint256 immutable inputSize; constructor(uint256 _log2Size) { inputSize = (1 << _log2Size); } function getBytes(bytes calldata _input) public view returns (bytes32) { require( _input.length > 0 && _input.length <= inputSize, "input len: (0,inputSize]" ); return "123"; } function commencekilling() public { address payable receiver = payable(msg.sender); selfdestruct(receiver); } } ================================================ FILE: tests/testdata/input_contracts/theft.sol ================================================ contract B{ uint x=0; uint total = 0; function incr() public returns(uint){ require(x==0); x += 1; } function incr2() public payable returns(uint){ require(x==1); x += 1; total += msg.value; } function continous_incr(uint val) public payable returns(uint){ require(x>=2); x += val; total += msg.value; } function foo() public returns(uint){ require(x==4); x += 1; msg.sender.transfer(total); } } ================================================ FILE: tests/testdata/input_contracts/transient.sol ================================================ pragma solidity 0.8.25; contract Generosity { mapping(address => bool) sentGifts; modifier nonreentrant { uint x; assembly { x := tload(0) } assert (x == 0); assembly { if tload(0) { revert(0, 0) } tstore(0, 1) } _; // Unlocks the guard, making the pattern composable. // After the function exits, it can be called again, even in the same transaction. assembly { x := tload(0) } // It should be same as before, i.e., 1 assert (x == 1); assembly { tstore(0, 0) } assembly { x := tload(0) } // resets to 0 assert (x == 0); } function claimGift() nonreentrant public { require(address(this).balance >= 1 ether); require(!sentGifts[msg.sender]); (bool success, ) = msg.sender.call{value: 1 ether}(""); require(success); // In a reentrant function, doing this last would open up the vulnerability sentGifts[msg.sender] = true; } } ================================================ FILE: tests/testdata/input_contracts/transient_bug.sol ================================================ pragma solidity 0.8.25; contract Generosity { mapping(address => bool) sentGifts; modifier nonreentrant { uint x; assembly { x := tload(0) } assert (x == 0); assembly { if tload(0) { revert(0, 0) } tstore(0, 1) } _; // Unlocks the guard, making the pattern composable. // After the function exits, it can be called again, even in the same transaction. assembly { x := tload(0) } assert (x != 1); assembly { tstore(0, 0) } assembly { x := tload(0) } assert (x == 0); } function claimGift() nonreentrant public { require(address(this).balance >= 1 ether); require(!sentGifts[msg.sender]); (bool success, ) = msg.sender.call{value: 1 ether}(""); require(success); // In a reentrant function, doing this last would open up the vulnerability sentGifts[msg.sender] = true; } } ================================================ FILE: tests/testdata/input_contracts/transient_bug_2.sol ================================================ pragma solidity 0.8.25; contract Generosity { mapping(address => bool) sentGifts; modifier nonreentrant { uint x; assembly { x := tload(0) } assert (x == 0); assembly { if tload(0) { revert(0, 0) } tstore(0, 1) } _; // Unlocks the guard, making the pattern composable. // After the function exits, it can be called again, even in the same transaction. assembly { x := tload(0) } assert (x == 1); assembly { tstore(0, 0) } assembly { x := tload(0) } assert (x == 1); } function claimGift() nonreentrant public { require(address(this).balance >= 1 ether); require(!sentGifts[msg.sender]); (bool success, ) = msg.sender.call{value: 1 ether}(""); require(success); // In a reentrant function, doing this last would open up the vulnerability sentGifts[msg.sender] = true; } } ================================================ FILE: tests/testdata/input_contracts/transient_recursive.sol ================================================ pragma solidity 0.8.25; contract Generosity { mapping(address => bool) sentGifts; modifier nonreentrant { uint x; assembly { x := tload(0) } assert (x == 0); assembly { if tload(0) { revert(0, 0) } tstore(0, 1) } _; // Unlocks the guard, making the pattern composable. // After the function exits, it can be called again, even in the same transaction. assembly { x := tload(0) } // It should be same as before, i.e., 1 assert (x == 1); assembly { tstore(0, 0) } assembly { x := tload(0) } // resets to 0 assert (x == 0); } function claimGift() nonreentrant public { require(address(this).balance >= 1 ether); require(!sentGifts[msg.sender]); (bool success, ) = msg.sender.call{value: 1 ether}(""); require(success); // In a reentrant function, doing this last would open up the vulnerability sentGifts[msg.sender] = true; // Make an internal call internalCall(); } // Internal function to make a recursive internal call function internalCall() internal { if (address(this).balance >= 1 ether) { claimGift(); } } // Function to receive Ether receive() external payable {} } ================================================ FILE: tests/testdata/input_contracts/tx.sol ================================================ pragma solidity ^0.4.16; contract EthTxOrderDependenceMinimal { address public owner; bool public claimed; uint public reward; function EthTxOrderDependenceMinimal() public { owner = msg.sender; } function setReward() public payable { require (!claimed); require(msg.sender == owner); owner.transfer(reward); reward = msg.value; } function claimReward(uint256 submission) { require (!claimed); require(submission < 10); msg.sender.transfer(reward); claimed = true; } } ================================================ FILE: tests/testdata/input_contracts/underflow.sol ================================================ pragma solidity ^0.5.0; contract Under { mapping(address => uint) balances; uint public totalSupply; constructor(uint _initialSupply) public { balances[msg.sender] = totalSupply = _initialSupply; } function sendeth(address _to, uint _value) public returns (bool) { require(balances[msg.sender] - _value >= 0); balances[msg.sender] -= _value; balances[_to] += _value; return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } } ================================================ FILE: tests/testdata/input_contracts/unexpected_ether_neg.sol ================================================ pragma solidity ^0.5.0; contract Lockdrop { function lock() external payable { uint256 eth = msg.value; address owner = msg.sender; assert(address(0x0).balance > msg.value); } } ================================================ FILE: tests/testdata/input_contracts/unexpected_ether_pos.sol ================================================ pragma solidity ^0.5.0; contract Lockdrop { function lock() external payable { uint256 eth = msg.value; address owner = msg.sender; assert(address(0x0).balance == msg.value); } } ================================================ FILE: tests/testdata/input_contracts/version_2.sol ================================================ // VERSION: pragma solidity ^0.7.0; contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_3.sol ================================================ /* ORIGINAL: pragma solidity ^0.7.0; */ contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_4.sol ================================================ // VERSION: pragma solidity ^0.7.0; /* ORIGINAL: pragma solidity ^0.7.0; */ pragma solidity ^0.8.0; contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_chaos.sol ================================================ pragma solidity >= 0 . 5 . 0 < 0 . 6 . 0; contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_contract.sol ================================================ contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_contract_0.7.0.sol ================================================ pragma solidity ^0.7.0; contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_contract_0.8.0.sol ================================================ pragma solidity ^0.8.0; contract Test { uint256 input; function add(uint256 a, uint256 b) public { input = a + b; } } ================================================ FILE: tests/testdata/input_contracts/version_patch.sol ================================================ // SPDX-License-Identifier: MIT pragma solidity ^0.8; // Patch version - X.y[.z] is missing contract EtherWallet { address payable public owner; constructor() { owner = payable(msg.sender); } receive() external payable {} function withdraw(uint256 _amount) external { require(msg.sender == owner, "caller is not owner"); payable(msg.sender).transfer(_amount); } function getBalance() external view returns (uint256) { return address(this).balance; } } ================================================ FILE: tests/testdata/input_contracts/weak_random.sol ================================================ pragma solidity ^0.5.0; contract WeakRandom { struct Contestant { address payable addr; uint gameId; } uint public prize = 2.5 ether; uint public totalTickets = 50; uint public pricePerTicket = prize / totalTickets; uint public gameId = 1; uint public nextTicket = 0; mapping (uint => Contestant) public contestants; function () payable external { uint moneySent = msg.value; while (moneySent >= pricePerTicket && nextTicket < totalTickets) { uint currTicket = nextTicket++; contestants[currTicket] = Contestant(msg.sender, gameId); moneySent -= pricePerTicket; } if (nextTicket == totalTickets) { chooseWinner(); } // Send back leftover money if (moneySent > 0) { msg.sender.transfer(moneySent); } } function chooseWinner() private { address seed1 = contestants[uint(block.coinbase) % totalTickets].addr; address seed2 = contestants[uint(msg.sender) % totalTickets].addr; uint seed3 = block.difficulty; bytes32 randHash = keccak256(abi.encode(seed1, seed2, seed3)); uint winningNumber = uint(randHash) % totalTickets; address payable winningAddress = contestants[winningNumber].addr; gameId++; nextTicket = 0; winningAddress.transfer(prize); } } ================================================ FILE: tests/testdata/inputs/calls.sol.o ================================================ 606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632776b16314610088578063379bf63c146100c15780635a6814ec14610116578063b5d02c8a1461012b578063d24b08cc14610180578063e11f493e14610195578063e1d10f79146101aa575b600080fd5b341561009357600080fd5b6100bf600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101e3565b005b34156100cc57600080fd5b6100d4610227565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012157600080fd5b61012961024c565b005b341561013657600080fd5b61013e61029b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561018b57600080fd5b6101936102c1565b005b34156101a057600080fd5b6101a8610311565b005b34156101b557600080fd5b6101e1600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610368565b005b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516000604051808303816000865af191505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516000604051808303816000865af191505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516000604051808303816000865af1915050506000600281905550565b8073ffffffffffffffffffffffffffffffffffffffff166040516000604051808303816000865af191505050505600a165627a7a72305820ee024c33eaef87e61cb33520322ac79ea5b18ccd400a8f15d002937d9868618a0029 ================================================ FILE: tests/testdata/inputs/coverage.sol.o ================================================ 608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610340806100606000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063228cb733146100725780633eb6a67e1461009d5780638da5cb5b146100a7578063ae169a50146100fe578063e834a8341461012b575b600080fd5b34801561007e57600080fd5b5061008761015a565b6040518082815260200191505060405180910390f35b6100a5610160565b005b3480156100b357600080fd5b506100bc61024a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010a57600080fd5b506101296004803603810190808035906020019092919050505061026f565b005b34801561013757600080fd5b50610140610301565b604051808215151515815260200191505060405180910390f35b60015481565b600060149054906101000a900460ff1615151561017c57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156101d757600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6001549081150290604051600060405180830381858888f19350505050158015610240573d6000803e3d6000fd5b5034600181905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1615151561028b57600080fd5b600a8110151561029a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc6001549081150290604051600060405180830381858888f193505050501580156102e2573d6000803e3d6000fd5b506001600060146101000a81548160ff02191690831515021790555050565b600060149054906101000a900460ff16815600a165627a7a723058207bb1caf5a53e1b9c9895f50b1740af67a18d256f4c2724858bdcd660db1729310029 ================================================ FILE: tests/testdata/inputs/environments.sol.o ================================================ 60806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1461005157806383f12fec1461007c575b600080fd5b34801561005d57600080fd5b50610066610104565b6040518082815260200191505060405180910390f35b34801561008857600080fd5b506100ea600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919050505061010a565b604051808215151515815260200191505060405180910390f35b60005481565b6000806000845191508382029050600082118015610129575060148211155b151561013457600080fd5b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550600192505050929150505600a165627a7a7230582016b81221eb990028632ba9b34d3c01599d24acdb5b81dd6789845696f5db257c0029 ================================================ FILE: tests/testdata/inputs/ether_send.sol.o ================================================ 608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806312065fe01461007d57806327e235e3146100a857806356885cd8146100ff5780636c343ffe146101165780638da5cb5b1461012d578063e8b5e51f14610184575b600080fd5b34801561008957600080fd5b5061009261018e565b6040518082815260200191505060405180910390f35b3480156100b457600080fd5b506100e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101d4565b6040518082815260200191505060405180910390f35b34801561010b57600080fd5b506101146101ec565b005b34801561012257600080fd5b5061012b61022f565b005b34801561013957600080fd5b506101426102eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61018c610311565b005b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60006020528060005260406000206000915090505481565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561028b57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156102e8573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025434118015610323575060035434105b151561032e57600080fd5b346000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505600a165627a7a72305820402df619c16e4325eb7830ed063880a283ac25dff982b6a5be67138df0c209550029 ================================================ FILE: tests/testdata/inputs/exceptions.sol.o ================================================ 60606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301d4277c14610093578063546455b5146100b657806378375f14146100d957806392dd38ea146100fc578063a08299f11461011f578063b34c361014610142578063b630d70614610157578063f44f13d81461017a575b600080fd5b341561009e57600080fd5b6100b4600480803590602001909190505061018f565b005b34156100c157600080fd5b6100d760048080359060200190919050506101b2565b005b34156100e457600080fd5b6100fa60048080359060200190919050506101c2565b005b341561010757600080fd5b61011d60048080359060200190919050506101d5565b005b341561012a57600080fd5b61014060048080359060200190919050506101ed565b005b341561014d57600080fd5b610155610202565b005b341561016257600080fd5b6101786004808035906020019091905050610217565b005b341561018557600080fd5b61018d610235565b005b600060088210156101ae576000826008811015156101a957fe5b015490505b5050565b601781141515156101bf57fe5b50565b601781141515156101d257600080fd5b50565b600080826008811015156101e557fe5b015490505050565b60008160018115156101fb57fe5b0490505050565b60006001905060008114151561021457fe5b50565b6000808211156102315781600181151561022d57fe5b0490505b5050565b60006001905060008111151561024757fe5b505600a165627a7a72305820b9f98ad234dd4e1d09a659013e7ffd1ecad3628194c307decc294b637820bb550029 ================================================ FILE: tests/testdata/inputs/exceptions_0.8.0.sol.o ================================================ 608060405234801561001057600080fd5b5060f18061001f6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063a02f5b99146041578063a9cc4718146049578063b34c3610146051575b600080fd5b60476059565b005b604f6063565b005b60576075565b005b6001600081905550565b6002600054146073576072608c565b5b565b600060019050600081146089576088608c565b5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220cdbce6751f5dd32798edbe8c5cefae09753627f94e3f6e4a1f33afdb28a32e5464736f6c63430008060033 ================================================ FILE: tests/testdata/inputs/extcall.sol.o ================================================ 608060405234801561001057600080fd5b50600073ffffffffffffffffffffffffffffffffffffffff166040518060000190506000604051808303816000865af19150503d806000811461006f576040519150601f19603f3d011682016040523d82523d6000602084013e610074565b606091505b505050600073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000806040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b505050506040513d602081101561012a57600080fd5b810190808051906020019092919050505050600061014457fe5b603f806101526000396000f3fe6080604052600080fdfea26469706673582212205bba7185aa846906fd4f2cc890c4095f521be787e49f5366712f751111e8d91764736f6c63430006000033 ================================================ FILE: tests/testdata/inputs/flag_array.sol.o ================================================ 608060405267016345785d8a0000341461001857600080fd5b600160006104d2611000811061003157610030610055565b5b602091828204019190066101000a81548160ff021916908315150217905550610084565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6101a6806100936000396000f3fe60806040526004361061001e5760003560e01c8063ab12585814610023575b600080fd5b61003d600480360381019061003891906100ee565b61003f565b005b600081101561004d57600080fd5b611000811061005b57600080fd5b60008161100081106100705761006f610125565b5b602091828204019190069054906101000a900460ff1661008f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156100d5573d6000803e3d6000fd5b5050565b6000813590506100e881610159565b92915050565b60006020828403121561010457610103610154565b5b6000610112848285016100d9565b91505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6101628161011b565b811461016d57600080fd5b5056fea264697066735822122038d1a63a64c5408c7008a0f3746ab94e43a04b5bc74f52e4869d3f15cf5b2b9e64736f6c63430008060033 ================================================ FILE: tests/testdata/inputs/kinds_of_calls.sol.o ================================================ 60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063141f32ff146100725780632e52d606146100b457806367e404ce146100dd5780639b58bc2614610132578063eea4c86414610174575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506101b6565b005b34156100bf57600080fd5b6100c7610273565b6040518082815260200191505060405180910390f35b34156100e857600080fd5b6100f0610279565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561013d57600080fd5b610172600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061029f565b005b341561017f57600080fd5b6101b4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061035a565b005b8173ffffffffffffffffffffffffffffffffffffffff1660405180807f7365744e2875696e743235362900000000000000000000000000000000000000815250600d01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506000604051808303816000875af292505050505050565b60005481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8173ffffffffffffffffffffffffffffffffffffffff1660405180807f7365744e2875696e743235362900000000000000000000000000000000000000815250600d01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381865af492505050505050565b8173ffffffffffffffffffffffffffffffffffffffff1660405180807f7365744e2875696e743235362900000000000000000000000000000000000000815250600d01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506000604051808303816000875af1925050505050505600a165627a7a72305820b2fb91d9c3f7e870879b71c8c41272ddfb1aded7dc856f09cd181e3754606e8a0029 ================================================ FILE: tests/testdata/inputs/metacoin.sol.o ================================================ 60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806327e235e314610051578063412664ae1461009e575b600080fd5b341561005c57600080fd5b610088600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506100f8565b6040518082815260200191505060405180910390f35b34156100a957600080fd5b6100de600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610110565b604051808215151515815260200191505060405180910390f35b60006020528060005260406000206000915090505481565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561016157600090506101fe565b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600090505b929150505600a165627a7a72305820c860d60246e215343f02c5025aeef4ad1f207b0a7d2dec05e43f6ecaaebe9cec0029 ================================================ FILE: tests/testdata/inputs/multi_contracts.sol.o ================================================ 606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638a4068dd146044575b600080fd5b3415604e57600080fd5b60546056565b005b3373ffffffffffffffffffffffffffffffffffffffff166108fc671bc16d674ec800009081150290604051600060405180830381858888f193505050501515609d57600080fd5b5600a165627a7a7230582028cb917d4f69cc2ea0fcd75329aa874b2bc743cfcde6b5197f571cff635aec130029 ================================================ FILE: tests/testdata/inputs/nonascii.sol.o ================================================ 608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806324ff38a214610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60606040805190810160405280601781526020017fd0a5d18dd0bbd0bbd0bed18320d092d0bed180d0bbd0b40000000000000000008152509050905600a165627a7a72305820a11284868fc6a38ff1d72ce9ec40db9c6c7c49902b5cabec3680e88e5ab92dcb0029 ================================================ FILE: tests/testdata/inputs/origin.sol.o ================================================ 60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156101d657806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505600a165627a7a7230582094f3b40753c82d05a159fa87a8b075fa6226d092f90191c0f813a12c032ffaac0029 ================================================ FILE: tests/testdata/inputs/overflow.sol.o ================================================ 608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806318160ddd1461005c57806370a0823114610087578063a3210e87146100ec575b600080fd5b34801561006857600080fd5b5061007161015f565b6040518082815260200191505060405180910390f35b34801561009357600080fd5b506100d6600480360360208110156100aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610165565b6040518082815260200191505060405180910390f35b3480156100f857600080fd5b506101456004803603604081101561010f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506101ad565b604051808215151515815260200191505060405180910390f35b60015481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403101515156101fe57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600190509291505056fea165627a7a72305820fd522172282e2304f6e94eb345fcb4a11ab5e1102b64333180676726d88159a00029 ================================================ FILE: tests/testdata/inputs/returnvalue.sol.o ================================================ 60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063633ab5e014610051578063e3bea28214610066575b600080fd5b341561005c57600080fd5b61006461007b565b005b341561007157600080fd5b6100796100d4565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516000604051808303816000865af191505015156100d257600080fd5b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516000604051808303816000865af1915050505600a165627a7a72305820ca8be054abc9437f3c7d25b22fda833fed76e2687a94e19ec61b094b7ae089d70029 ================================================ FILE: tests/testdata/inputs/safe_funcs.sol.o ================================================ 6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063a02f5b99146041578063a9cc4718146049578063b34c3610146051575b600080fd5b60476059565b005b604f6063565b005b60576075565b005b6001600081905550565b6002600054146073576072608c565b5b565b600060019050600081146089576088608c565b5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e4fd4d461febf90b9c09fc5f55e8dc77f373e513a4448395d2073e8c3f388ecf64736f6c63430008060033 ================================================ FILE: tests/testdata/inputs/suicide.sol.o ================================================ 606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063cbf0b0c0146044575b600080fd5b3415604e57600080fd5b6078600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050607a565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff00a165627a7a723058207c36f2082aef9ddde7fe0dc12aca42e091159cac6d4e9cb1b97983ea4e005d940029 ================================================ FILE: tests/testdata/inputs/symbolic_exec_bytecode.sol.o ================================================ 60a060405234801561001057600080fd5b5060405161039b38038061039b83398181016040528101906100329190610059565b806001901b60808181525050506100ac565b60008151905061005381610095565b92915050565b60006020828403121561006f5761006e610090565b5b600061007d84828501610044565b91505092915050565b6000819050919050565b600080fd5b61009e81610086565b81146100a957600080fd5b50565b6080516102d56100c66000396000608601526102d56000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063781c6dbe1461003b5780637c11da201461006b575b600080fd5b61005560048036038101906100509190610188565b610075565b6040516100629190610207565b60405180910390f35b610073610114565b005b600080838390501180156100ac57507f00000000000000000000000000000000000000000000000000000000000000008383905011155b6100eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e290610222565b60405180910390fd5b7f3132330000000000000000000000000000000000000000000000000000000000905092915050565b60003390508073ffffffffffffffffffffffffffffffffffffffff16ff5b60008083601f84011261014857610147610262565b5b8235905067ffffffffffffffff8111156101655761016461025d565b5b60208301915083600182028301111561018157610180610267565b5b9250929050565b6000806020838503121561019f5761019e610271565b5b600083013567ffffffffffffffff8111156101bd576101bc61026c565b5b6101c985828601610132565b92509250509250929050565b6101de81610253565b82525050565b60006101f1601883610242565b91506101fc82610276565b602082019050919050565b600060208201905061021c60008301846101d5565b92915050565b6000602082019050818103600083015261023b816101e4565b9050919050565b600082825260208201905092915050565b6000819050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f696e707574206c656e3a2028302c696e70757453697a655d000000000000000060008201525056fea26469706673582212203f37af85f2d345d5d16dd25ae1404605d9e5e7240b970530ef963385fc73a82e64736f6c63430008060033 ================================================ FILE: tests/testdata/inputs/underflow.sol.o ================================================ 606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806318160ddd146100675780636241bfd11461009057806370a08231146100b3578063a3210e8714610100575b600080fd5b341561007257600080fd5b61007a61015a565b6040518082815260200191505060405180910390f35b341561009b57600080fd5b6100b16004808035906020019091905050610160565b005b34156100be57600080fd5b6100ea600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101ab565b6040518082815260200191505060405180910390f35b341561010b57600080fd5b610140600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506101f3565b604051808215151515815260200191505060405180910390f35b60015481565b8060018190556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054031015151561024457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060019050929150505600a165627a7a72305820acf4c21d1fe3e6f27af08897642fb3b8cc64265635081cf3ae7fe1f06b4af6490029 ================================================ FILE: tests/testdata/json_test_dir/PRC20.sol ================================================ pragma solidity ^0.8.0; contract PRC20{ function nothing1(uint256 a, uint256 b) public pure returns(uint256) { return a+b; } } ================================================ FILE: tests/testdata/json_test_dir/dir_a/input_file.sol ================================================ import "@openzeppelin/contracts/token/PRC20/PRC20.sol"; contract Nothing is PRC20{ string x_0 = ""; bytes3 x_1 = "A"; bytes5 x_2 = "E"; bytes5 x_3 = ""; bytes3 x_4 = "I"; bytes3 x_5 = "U"; bytes3 x_6 = "O"; bytes3 x_7 = "0"; bytes3 x_8 = "U"; bytes3 x_9 = "U"; function stringCompare(string memory a, string memory b) internal pure returns (bool) { if(bytes(a).length != bytes(b).length) { return false; } else { return keccak256(bytes(a)) == keccak256(bytes(b)); } } function nothing(string memory g_0, bytes3 g_1, bytes5 g_2, bytes5 g_3, bytes3 g_4, bytes3 g_5, bytes3 g_6, bytes3 g_7, bytes3 g_8, bytes3 g_9, bytes3 g_10, bytes3 g_11) public view returns (bool){ if (!stringCompare(g_0, x_0)) return false; if (g_1 != x_1) return false; if (g_2 != x_2) return false; if (g_3 != x_3) return false; if (g_4 != x_4) return false; if (g_5 != x_5) return false; if (g_6 != x_6) return false; if (g_7 != x_7) return false; if (g_8 != x_8) return false; if (g_9 != x_9) return false; if (g_10 != x_9) return false; if (g_11 != x_9) return false; return true; } } ================================================ FILE: tests/testdata/json_test_dir/dir_a/input_file_args.sol ================================================ import "../PRC20.sol"; contract Nothing is PRC20{ function nothing(string memory g_0, bytes3 g_11) public view returns (bool){ return true; } } ================================================ FILE: tests/testdata/json_test_dir/test_file.json ================================================ { "remappings": [ "@openzeppelin/contracts/token/PRC20/=../" ], "optimizer": { "enabled": true } } ================================================ FILE: tests/testdata/json_test_dir/test_file_disable.json ================================================ { "remappings": [ "@openzeppelin/contracts/token/PRC20/=../" ] } ================================================ FILE: tests/testdata/outputs_expected/calls.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x0083 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x2776b163 60 EQ 61 PUSH2 0x0088 64 JUMPI 65 DUP1 66 PUSH4 0x379bf63c 71 EQ 72 PUSH2 0x00c1 75 JUMPI 76 DUP1 77 PUSH4 0x5a6814ec 82 EQ 83 PUSH2 0x0116 86 JUMPI 87 DUP1 88 PUSH4 0xb5d02c8a 93 EQ 94 PUSH2 0x012b 97 JUMPI 98 DUP1 99 PUSH4 0xd24b08cc 104 EQ 105 PUSH2 0x0180 108 JUMPI 109 DUP1 110 PUSH4 0xe11f493e 115 EQ 116 PUSH2 0x0195 119 JUMPI 120 DUP1 121 PUSH4 0xe1d10f79 126 EQ 127 PUSH2 0x01aa 130 JUMPI 131 JUMPDEST 132 PUSH1 0x00 134 DUP1 135 REVERT 136 JUMPDEST 137 CALLVALUE 138 ISZERO 139 PUSH2 0x0093 142 JUMPI 143 PUSH1 0x00 145 DUP1 146 REVERT 147 JUMPDEST 148 PUSH2 0x00bf 151 PUSH1 0x04 153 DUP1 154 DUP1 155 CALLDATALOAD 156 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 177 AND 178 SWAP1 179 PUSH1 0x20 181 ADD 182 SWAP1 183 SWAP2 184 SWAP1 185 POP 186 POP 187 PUSH2 0x01e3 190 JUMP 191 JUMPDEST 192 STOP 193 JUMPDEST 194 CALLVALUE 195 ISZERO 196 PUSH2 0x00cc 199 JUMPI 200 PUSH1 0x00 202 DUP1 203 REVERT 204 JUMPDEST 205 PUSH2 0x00d4 208 PUSH2 0x0227 211 JUMP 212 JUMPDEST 213 PUSH1 0x40 215 MLOAD 216 DUP1 217 DUP3 218 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 239 AND 240 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 261 AND 262 DUP2 263 MSTORE 264 PUSH1 0x20 266 ADD 267 SWAP2 268 POP 269 POP 270 PUSH1 0x40 272 MLOAD 273 DUP1 274 SWAP2 275 SUB 276 SWAP1 277 RETURN 278 JUMPDEST 279 CALLVALUE 280 ISZERO 281 PUSH2 0x0121 284 JUMPI 285 PUSH1 0x00 287 DUP1 288 REVERT 289 JUMPDEST 290 PUSH2 0x0129 293 PUSH2 0x024c 296 JUMP 297 JUMPDEST 298 STOP 299 JUMPDEST 300 CALLVALUE 301 ISZERO 302 PUSH2 0x0136 305 JUMPI 306 PUSH1 0x00 308 DUP1 309 REVERT 310 JUMPDEST 311 PUSH2 0x013e 314 PUSH2 0x029b 317 JUMP 318 JUMPDEST 319 PUSH1 0x40 321 MLOAD 322 DUP1 323 DUP3 324 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 345 AND 346 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 367 AND 368 DUP2 369 MSTORE 370 PUSH1 0x20 372 ADD 373 SWAP2 374 POP 375 POP 376 PUSH1 0x40 378 MLOAD 379 DUP1 380 SWAP2 381 SUB 382 SWAP1 383 RETURN 384 JUMPDEST 385 CALLVALUE 386 ISZERO 387 PUSH2 0x018b 390 JUMPI 391 PUSH1 0x00 393 DUP1 394 REVERT 395 JUMPDEST 396 PUSH2 0x0193 399 PUSH2 0x02c1 402 JUMP 403 JUMPDEST 404 STOP 405 JUMPDEST 406 CALLVALUE 407 ISZERO 408 PUSH2 0x01a0 411 JUMPI 412 PUSH1 0x00 414 DUP1 415 REVERT 416 JUMPDEST 417 PUSH2 0x01a8 420 PUSH2 0x0311 423 JUMP 424 JUMPDEST 425 STOP 426 JUMPDEST 427 CALLVALUE 428 ISZERO 429 PUSH2 0x01b5 432 JUMPI 433 PUSH1 0x00 435 DUP1 436 REVERT 437 JUMPDEST 438 PUSH2 0x01e1 441 PUSH1 0x04 443 DUP1 444 DUP1 445 CALLDATALOAD 446 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 467 AND 468 SWAP1 469 PUSH1 0x20 471 ADD 472 SWAP1 473 SWAP2 474 SWAP1 475 POP 476 POP 477 PUSH2 0x0368 480 JUMP 481 JUMPDEST 482 STOP 483 JUMPDEST 484 DUP1 485 PUSH1 0x01 487 PUSH1 0x00 489 PUSH2 0x0100 492 EXP 493 DUP2 494 SLOAD 495 DUP2 496 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 517 MUL 518 NOT 519 AND 520 SWAP1 521 DUP4 522 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 543 AND 544 MUL 545 OR 546 SWAP1 547 SSTORE 548 POP 549 POP 550 JUMP 551 JUMPDEST 552 PUSH1 0x00 554 DUP1 555 SWAP1 556 SLOAD 557 SWAP1 558 PUSH2 0x0100 561 EXP 562 SWAP1 563 DIV 564 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 585 AND 586 DUP2 587 JUMP 588 JUMPDEST 589 PUSH1 0x00 591 DUP1 592 SWAP1 593 SLOAD 594 SWAP1 595 PUSH2 0x0100 598 EXP 599 SWAP1 600 DIV 601 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 622 AND 623 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 644 AND 645 PUSH1 0x40 647 MLOAD 648 PUSH1 0x00 650 PUSH1 0x40 652 MLOAD 653 DUP1 654 DUP4 655 SUB 656 DUP2 657 PUSH1 0x00 659 DUP7 660 GAS 661 CALL 662 SWAP2 663 POP 664 POP 665 POP 666 JUMP 667 JUMPDEST 668 PUSH1 0x01 670 PUSH1 0x00 672 SWAP1 673 SLOAD 674 SWAP1 675 PUSH2 0x0100 678 EXP 679 SWAP1 680 DIV 681 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 702 AND 703 DUP2 704 JUMP 705 JUMPDEST 706 PUSH1 0x01 708 PUSH1 0x00 710 SWAP1 711 SLOAD 712 SWAP1 713 PUSH2 0x0100 716 EXP 717 SWAP1 718 DIV 719 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 740 AND 741 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 762 AND 763 PUSH1 0x40 765 MLOAD 766 PUSH1 0x00 768 PUSH1 0x40 770 MLOAD 771 DUP1 772 DUP4 773 SUB 774 DUP2 775 PUSH1 0x00 777 DUP7 778 GAS 779 CALL 780 SWAP2 781 POP 782 POP 783 POP 784 JUMP 785 JUMPDEST 786 PUSH1 0x00 788 DUP1 789 SWAP1 790 SLOAD 791 SWAP1 792 PUSH2 0x0100 795 EXP 796 SWAP1 797 DIV 798 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 819 AND 820 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 841 AND 842 PUSH1 0x40 844 MLOAD 845 PUSH1 0x00 847 PUSH1 0x40 849 MLOAD 850 DUP1 851 DUP4 852 SUB 853 DUP2 854 PUSH1 0x00 856 DUP7 857 GAS 858 CALL 859 SWAP2 860 POP 861 POP 862 POP 863 PUSH1 0x00 865 PUSH1 0x02 867 DUP2 868 SWAP1 869 SSTORE 870 POP 871 JUMP 872 JUMPDEST 873 DUP1 874 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 895 AND 896 PUSH1 0x40 898 MLOAD 899 PUSH1 0x00 901 PUSH1 0x40 903 MLOAD 904 DUP1 905 DUP4 906 SUB 907 DUP2 908 PUSH1 0x00 910 DUP7 911 GAS 912 CALL 913 SWAP2 914 POP 915 POP 916 POP 917 POP 918 JUMP 919 STOP ================================================ FILE: tests/testdata/outputs_expected/calls.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/environments.sol.o.easm ================================================ 0 PUSH1 0x80 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x004c 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x06661abd 60 EQ 61 PUSH2 0x0051 64 JUMPI 65 DUP1 66 PUSH4 0x83f12fec 71 EQ 72 PUSH2 0x007c 75 JUMPI 76 JUMPDEST 77 PUSH1 0x00 79 DUP1 80 REVERT 81 JUMPDEST 82 CALLVALUE 83 DUP1 84 ISZERO 85 PUSH2 0x005d 88 JUMPI 89 PUSH1 0x00 91 DUP1 92 REVERT 93 JUMPDEST 94 POP 95 PUSH2 0x0066 98 PUSH2 0x0104 101 JUMP 102 JUMPDEST 103 PUSH1 0x40 105 MLOAD 106 DUP1 107 DUP3 108 DUP2 109 MSTORE 110 PUSH1 0x20 112 ADD 113 SWAP2 114 POP 115 POP 116 PUSH1 0x40 118 MLOAD 119 DUP1 120 SWAP2 121 SUB 122 SWAP1 123 RETURN 124 JUMPDEST 125 CALLVALUE 126 DUP1 127 ISZERO 128 PUSH2 0x0088 131 JUMPI 132 PUSH1 0x00 134 DUP1 135 REVERT 136 JUMPDEST 137 POP 138 PUSH2 0x00ea 141 PUSH1 0x04 143 DUP1 144 CALLDATASIZE 145 SUB 146 DUP2 147 ADD 148 SWAP1 149 DUP1 150 DUP1 151 CALLDATALOAD 152 SWAP1 153 PUSH1 0x20 155 ADD 156 SWAP1 157 DUP3 158 ADD 159 DUP1 160 CALLDATALOAD 161 SWAP1 162 PUSH1 0x20 164 ADD 165 SWAP1 166 DUP1 167 DUP1 168 PUSH1 0x20 170 MUL 171 PUSH1 0x20 173 ADD 174 PUSH1 0x40 176 MLOAD 177 SWAP1 178 DUP2 179 ADD 180 PUSH1 0x40 182 MSTORE 183 DUP1 184 SWAP4 185 SWAP3 186 SWAP2 187 SWAP1 188 DUP2 189 DUP2 190 MSTORE 191 PUSH1 0x20 193 ADD 194 DUP4 195 DUP4 196 PUSH1 0x20 198 MUL 199 DUP1 200 DUP3 201 DUP5 202 CALLDATACOPY 203 DUP3 204 ADD 205 SWAP2 206 POP 207 POP 208 POP 209 POP 210 POP 211 POP 212 SWAP2 213 SWAP3 214 SWAP2 215 SWAP3 216 SWAP1 217 DUP1 218 CALLDATALOAD 219 SWAP1 220 PUSH1 0x20 222 ADD 223 SWAP1 224 SWAP3 225 SWAP2 226 SWAP1 227 POP 228 POP 229 POP 230 PUSH2 0x010a 233 JUMP 234 JUMPDEST 235 PUSH1 0x40 237 MLOAD 238 DUP1 239 DUP3 240 ISZERO 241 ISZERO 242 ISZERO 243 ISZERO 244 DUP2 245 MSTORE 246 PUSH1 0x20 248 ADD 249 SWAP2 250 POP 251 POP 252 PUSH1 0x40 254 MLOAD 255 DUP1 256 SWAP2 257 SUB 258 SWAP1 259 RETURN 260 JUMPDEST 261 PUSH1 0x00 263 SLOAD 264 DUP2 265 JUMP 266 JUMPDEST 267 PUSH1 0x00 269 DUP1 270 PUSH1 0x00 272 DUP5 273 MLOAD 274 SWAP2 275 POP 276 DUP4 277 DUP3 278 MUL 279 SWAP1 280 POP 281 PUSH1 0x00 283 DUP3 284 GT 285 DUP1 286 ISZERO 287 PUSH2 0x0129 290 JUMPI 291 POP 292 PUSH1 0x14 294 DUP3 295 GT 296 ISZERO 297 JUMPDEST 298 ISZERO 299 ISZERO 300 PUSH2 0x0134 303 JUMPI 304 PUSH1 0x00 306 DUP1 307 REVERT 308 JUMPDEST 309 DUP1 310 PUSH1 0x01 312 PUSH1 0x00 314 CALLER 315 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 336 AND 337 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 358 AND 359 DUP2 360 MSTORE 361 PUSH1 0x20 363 ADD 364 SWAP1 365 DUP2 366 MSTORE 367 PUSH1 0x20 369 ADD 370 PUSH1 0x00 372 SHA3 373 PUSH1 0x00 375 DUP3 376 DUP3 377 SLOAD 378 SUB 379 SWAP3 380 POP 381 POP 382 DUP2 383 SWAP1 384 SSTORE 385 POP 386 PUSH1 0x01 388 SWAP3 389 POP 390 POP 391 POP 392 SWAP3 393 SWAP2 394 POP 395 POP 396 JUMP 397 STOP ================================================ FILE: tests/testdata/outputs_expected/environments.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/ether_send.sol.o.easm ================================================ 0 PUSH1 0x80 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x0078 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x12065fe0 60 EQ 61 PUSH2 0x007d 64 JUMPI 65 DUP1 66 PUSH4 0x27e235e3 71 EQ 72 PUSH2 0x00a8 75 JUMPI 76 DUP1 77 PUSH4 0x56885cd8 82 EQ 83 PUSH2 0x00ff 86 JUMPI 87 DUP1 88 PUSH4 0x6c343ffe 93 EQ 94 PUSH2 0x0116 97 JUMPI 98 DUP1 99 PUSH4 0x8da5cb5b 104 EQ 105 PUSH2 0x012d 108 JUMPI 109 DUP1 110 PUSH4 0xe8b5e51f 115 EQ 116 PUSH2 0x0184 119 JUMPI 120 JUMPDEST 121 PUSH1 0x00 123 DUP1 124 REVERT 125 JUMPDEST 126 CALLVALUE 127 DUP1 128 ISZERO 129 PUSH2 0x0089 132 JUMPI 133 PUSH1 0x00 135 DUP1 136 REVERT 137 JUMPDEST 138 POP 139 PUSH2 0x0092 142 PUSH2 0x018e 145 JUMP 146 JUMPDEST 147 PUSH1 0x40 149 MLOAD 150 DUP1 151 DUP3 152 DUP2 153 MSTORE 154 PUSH1 0x20 156 ADD 157 SWAP2 158 POP 159 POP 160 PUSH1 0x40 162 MLOAD 163 DUP1 164 SWAP2 165 SUB 166 SWAP1 167 RETURN 168 JUMPDEST 169 CALLVALUE 170 DUP1 171 ISZERO 172 PUSH2 0x00b4 175 JUMPI 176 PUSH1 0x00 178 DUP1 179 REVERT 180 JUMPDEST 181 POP 182 PUSH2 0x00e9 185 PUSH1 0x04 187 DUP1 188 CALLDATASIZE 189 SUB 190 DUP2 191 ADD 192 SWAP1 193 DUP1 194 DUP1 195 CALLDATALOAD 196 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 217 AND 218 SWAP1 219 PUSH1 0x20 221 ADD 222 SWAP1 223 SWAP3 224 SWAP2 225 SWAP1 226 POP 227 POP 228 POP 229 PUSH2 0x01d4 232 JUMP 233 JUMPDEST 234 PUSH1 0x40 236 MLOAD 237 DUP1 238 DUP3 239 DUP2 240 MSTORE 241 PUSH1 0x20 243 ADD 244 SWAP2 245 POP 246 POP 247 PUSH1 0x40 249 MLOAD 250 DUP1 251 SWAP2 252 SUB 253 SWAP1 254 RETURN 255 JUMPDEST 256 CALLVALUE 257 DUP1 258 ISZERO 259 PUSH2 0x010b 262 JUMPI 263 PUSH1 0x00 265 DUP1 266 REVERT 267 JUMPDEST 268 POP 269 PUSH2 0x0114 272 PUSH2 0x01ec 275 JUMP 276 JUMPDEST 277 STOP 278 JUMPDEST 279 CALLVALUE 280 DUP1 281 ISZERO 282 PUSH2 0x0122 285 JUMPI 286 PUSH1 0x00 288 DUP1 289 REVERT 290 JUMPDEST 291 POP 292 PUSH2 0x012b 295 PUSH2 0x022f 298 JUMP 299 JUMPDEST 300 STOP 301 JUMPDEST 302 CALLVALUE 303 DUP1 304 ISZERO 305 PUSH2 0x0139 308 JUMPI 309 PUSH1 0x00 311 DUP1 312 REVERT 313 JUMPDEST 314 POP 315 PUSH2 0x0142 318 PUSH2 0x02eb 321 JUMP 322 JUMPDEST 323 PUSH1 0x40 325 MLOAD 326 DUP1 327 DUP3 328 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 349 AND 350 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 371 AND 372 DUP2 373 MSTORE 374 PUSH1 0x20 376 ADD 377 SWAP2 378 POP 379 POP 380 PUSH1 0x40 382 MLOAD 383 DUP1 384 SWAP2 385 SUB 386 SWAP1 387 RETURN 388 JUMPDEST 389 PUSH2 0x018c 392 PUSH2 0x0311 395 JUMP 396 JUMPDEST 397 STOP 398 JUMPDEST 399 PUSH1 0x00 401 DUP1 402 PUSH1 0x00 404 CALLER 405 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 426 AND 427 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 448 AND 449 DUP2 450 MSTORE 451 PUSH1 0x20 453 ADD 454 SWAP1 455 DUP2 456 MSTORE 457 PUSH1 0x20 459 ADD 460 PUSH1 0x00 462 SHA3 463 SLOAD 464 SWAP1 465 POP 466 SWAP1 467 JUMP 468 JUMPDEST 469 PUSH1 0x00 471 PUSH1 0x20 473 MSTORE 474 DUP1 475 PUSH1 0x00 477 MSTORE 478 PUSH1 0x40 480 PUSH1 0x00 482 SHA3 483 PUSH1 0x00 485 SWAP2 486 POP 487 SWAP1 488 POP 489 SLOAD 490 DUP2 491 JUMP 492 JUMPDEST 493 CALLER 494 PUSH1 0x01 496 PUSH1 0x00 498 PUSH2 0x0100 501 EXP 502 DUP2 503 SLOAD 504 DUP2 505 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 526 MUL 527 NOT 528 AND 529 SWAP1 530 DUP4 531 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 552 AND 553 MUL 554 OR 555 SWAP1 556 SSTORE 557 POP 558 JUMP 559 JUMPDEST 560 PUSH1 0x01 562 PUSH1 0x00 564 SWAP1 565 SLOAD 566 SWAP1 567 PUSH2 0x0100 570 EXP 571 SWAP1 572 DIV 573 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 594 AND 595 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 616 AND 617 CALLER 618 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 639 AND 640 EQ 641 ISZERO 642 ISZERO 643 PUSH2 0x028b 646 JUMPI 647 PUSH1 0x00 649 DUP1 650 REVERT 651 JUMPDEST 652 CALLER 653 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 674 AND 675 PUSH2 0x08fc 678 ADDRESS 679 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 700 AND 701 BALANCE 702 SWAP1 703 DUP2 704 ISZERO 705 MUL 706 SWAP1 707 PUSH1 0x40 709 MLOAD 710 PUSH1 0x00 712 PUSH1 0x40 714 MLOAD 715 DUP1 716 DUP4 717 SUB 718 DUP2 719 DUP6 720 DUP9 721 DUP9 722 CALL 723 SWAP4 724 POP 725 POP 726 POP 727 POP 728 ISZERO 729 DUP1 730 ISZERO 731 PUSH2 0x02e8 734 JUMPI 735 RETURNDATASIZE 736 PUSH1 0x00 738 DUP1 739 RETURNDATACOPY 740 RETURNDATASIZE 741 PUSH1 0x00 743 REVERT 744 JUMPDEST 745 POP 746 JUMP 747 JUMPDEST 748 PUSH1 0x01 750 PUSH1 0x00 752 SWAP1 753 SLOAD 754 SWAP1 755 PUSH2 0x0100 758 EXP 759 SWAP1 760 DIV 761 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 782 AND 783 DUP2 784 JUMP 785 JUMPDEST 786 PUSH1 0x02 788 SLOAD 789 CALLVALUE 790 GT 791 DUP1 792 ISZERO 793 PUSH2 0x0323 796 JUMPI 797 POP 798 PUSH1 0x03 800 SLOAD 801 CALLVALUE 802 LT 803 JUMPDEST 804 ISZERO 805 ISZERO 806 PUSH2 0x032e 809 JUMPI 810 PUSH1 0x00 812 DUP1 813 REVERT 814 JUMPDEST 815 CALLVALUE 816 PUSH1 0x00 818 DUP1 819 CALLER 820 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 841 AND 842 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 863 AND 864 DUP2 865 MSTORE 866 PUSH1 0x20 868 ADD 869 SWAP1 870 DUP2 871 MSTORE 872 PUSH1 0x20 874 ADD 875 PUSH1 0x00 877 SHA3 878 PUSH1 0x00 880 DUP3 881 DUP3 882 SLOAD 883 ADD 884 SWAP3 885 POP 886 POP 887 DUP2 888 SWAP1 889 SSTORE 890 POP 891 JUMP 892 STOP ================================================ FILE: tests/testdata/outputs_expected/ether_send.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/exceptions.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x008e 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x01d4277c 60 EQ 61 PUSH2 0x0093 64 JUMPI 65 DUP1 66 PUSH4 0x546455b5 71 EQ 72 PUSH2 0x00b6 75 JUMPI 76 DUP1 77 PUSH4 0x78375f14 82 EQ 83 PUSH2 0x00d9 86 JUMPI 87 DUP1 88 PUSH4 0x92dd38ea 93 EQ 94 PUSH2 0x00fc 97 JUMPI 98 DUP1 99 PUSH4 0xa08299f1 104 EQ 105 PUSH2 0x011f 108 JUMPI 109 DUP1 110 PUSH4 0xb34c3610 115 EQ 116 PUSH2 0x0142 119 JUMPI 120 DUP1 121 PUSH4 0xb630d706 126 EQ 127 PUSH2 0x0157 130 JUMPI 131 DUP1 132 PUSH4 0xf44f13d8 137 EQ 138 PUSH2 0x017a 141 JUMPI 142 JUMPDEST 143 PUSH1 0x00 145 DUP1 146 REVERT 147 JUMPDEST 148 CALLVALUE 149 ISZERO 150 PUSH2 0x009e 153 JUMPI 154 PUSH1 0x00 156 DUP1 157 REVERT 158 JUMPDEST 159 PUSH2 0x00b4 162 PUSH1 0x04 164 DUP1 165 DUP1 166 CALLDATALOAD 167 SWAP1 168 PUSH1 0x20 170 ADD 171 SWAP1 172 SWAP2 173 SWAP1 174 POP 175 POP 176 PUSH2 0x018f 179 JUMP 180 JUMPDEST 181 STOP 182 JUMPDEST 183 CALLVALUE 184 ISZERO 185 PUSH2 0x00c1 188 JUMPI 189 PUSH1 0x00 191 DUP1 192 REVERT 193 JUMPDEST 194 PUSH2 0x00d7 197 PUSH1 0x04 199 DUP1 200 DUP1 201 CALLDATALOAD 202 SWAP1 203 PUSH1 0x20 205 ADD 206 SWAP1 207 SWAP2 208 SWAP1 209 POP 210 POP 211 PUSH2 0x01b2 214 JUMP 215 JUMPDEST 216 STOP 217 JUMPDEST 218 CALLVALUE 219 ISZERO 220 PUSH2 0x00e4 223 JUMPI 224 PUSH1 0x00 226 DUP1 227 REVERT 228 JUMPDEST 229 PUSH2 0x00fa 232 PUSH1 0x04 234 DUP1 235 DUP1 236 CALLDATALOAD 237 SWAP1 238 PUSH1 0x20 240 ADD 241 SWAP1 242 SWAP2 243 SWAP1 244 POP 245 POP 246 PUSH2 0x01c2 249 JUMP 250 JUMPDEST 251 STOP 252 JUMPDEST 253 CALLVALUE 254 ISZERO 255 PUSH2 0x0107 258 JUMPI 259 PUSH1 0x00 261 DUP1 262 REVERT 263 JUMPDEST 264 PUSH2 0x011d 267 PUSH1 0x04 269 DUP1 270 DUP1 271 CALLDATALOAD 272 SWAP1 273 PUSH1 0x20 275 ADD 276 SWAP1 277 SWAP2 278 SWAP1 279 POP 280 POP 281 PUSH2 0x01d5 284 JUMP 285 JUMPDEST 286 STOP 287 JUMPDEST 288 CALLVALUE 289 ISZERO 290 PUSH2 0x012a 293 JUMPI 294 PUSH1 0x00 296 DUP1 297 REVERT 298 JUMPDEST 299 PUSH2 0x0140 302 PUSH1 0x04 304 DUP1 305 DUP1 306 CALLDATALOAD 307 SWAP1 308 PUSH1 0x20 310 ADD 311 SWAP1 312 SWAP2 313 SWAP1 314 POP 315 POP 316 PUSH2 0x01ed 319 JUMP 320 JUMPDEST 321 STOP 322 JUMPDEST 323 CALLVALUE 324 ISZERO 325 PUSH2 0x014d 328 JUMPI 329 PUSH1 0x00 331 DUP1 332 REVERT 333 JUMPDEST 334 PUSH2 0x0155 337 PUSH2 0x0202 340 JUMP 341 JUMPDEST 342 STOP 343 JUMPDEST 344 CALLVALUE 345 ISZERO 346 PUSH2 0x0162 349 JUMPI 350 PUSH1 0x00 352 DUP1 353 REVERT 354 JUMPDEST 355 PUSH2 0x0178 358 PUSH1 0x04 360 DUP1 361 DUP1 362 CALLDATALOAD 363 SWAP1 364 PUSH1 0x20 366 ADD 367 SWAP1 368 SWAP2 369 SWAP1 370 POP 371 POP 372 PUSH2 0x0217 375 JUMP 376 JUMPDEST 377 STOP 378 JUMPDEST 379 CALLVALUE 380 ISZERO 381 PUSH2 0x0185 384 JUMPI 385 PUSH1 0x00 387 DUP1 388 REVERT 389 JUMPDEST 390 PUSH2 0x018d 393 PUSH2 0x0235 396 JUMP 397 JUMPDEST 398 STOP 399 JUMPDEST 400 PUSH1 0x00 402 PUSH1 0x08 404 DUP3 405 LT 406 ISZERO 407 PUSH2 0x01ae 410 JUMPI 411 PUSH1 0x00 413 DUP3 414 PUSH1 0x08 416 DUP2 417 LT 418 ISZERO 419 ISZERO 420 PUSH2 0x01a9 423 JUMPI 424 ASSERT_FAIL 425 JUMPDEST 426 ADD 427 SLOAD 428 SWAP1 429 POP 430 JUMPDEST 431 POP 432 POP 433 JUMP 434 JUMPDEST 435 PUSH1 0x17 437 DUP2 438 EQ 439 ISZERO 440 ISZERO 441 ISZERO 442 PUSH2 0x01bf 445 JUMPI 446 ASSERT_FAIL 447 JUMPDEST 448 POP 449 JUMP 450 JUMPDEST 451 PUSH1 0x17 453 DUP2 454 EQ 455 ISZERO 456 ISZERO 457 ISZERO 458 PUSH2 0x01d2 461 JUMPI 462 PUSH1 0x00 464 DUP1 465 REVERT 466 JUMPDEST 467 POP 468 JUMP 469 JUMPDEST 470 PUSH1 0x00 472 DUP1 473 DUP3 474 PUSH1 0x08 476 DUP2 477 LT 478 ISZERO 479 ISZERO 480 PUSH2 0x01e5 483 JUMPI 484 ASSERT_FAIL 485 JUMPDEST 486 ADD 487 SLOAD 488 SWAP1 489 POP 490 POP 491 POP 492 JUMP 493 JUMPDEST 494 PUSH1 0x00 496 DUP2 497 PUSH1 0x01 499 DUP2 500 ISZERO 501 ISZERO 502 PUSH2 0x01fb 505 JUMPI 506 ASSERT_FAIL 507 JUMPDEST 508 DIV 509 SWAP1 510 POP 511 POP 512 POP 513 JUMP 514 JUMPDEST 515 PUSH1 0x00 517 PUSH1 0x01 519 SWAP1 520 POP 521 PUSH1 0x00 523 DUP2 524 EQ 525 ISZERO 526 ISZERO 527 PUSH2 0x0214 530 JUMPI 531 ASSERT_FAIL 532 JUMPDEST 533 POP 534 JUMP 535 JUMPDEST 536 PUSH1 0x00 538 DUP1 539 DUP3 540 GT 541 ISZERO 542 PUSH2 0x0231 545 JUMPI 546 DUP2 547 PUSH1 0x01 549 DUP2 550 ISZERO 551 ISZERO 552 PUSH2 0x022d 555 JUMPI 556 ASSERT_FAIL 557 JUMPDEST 558 DIV 559 SWAP1 560 POP 561 JUMPDEST 562 POP 563 POP 564 JUMP 565 JUMPDEST 566 PUSH1 0x00 568 PUSH1 0x01 570 SWAP1 571 POP 572 PUSH1 0x00 574 DUP2 575 GT 576 ISZERO 577 ISZERO 578 PUSH2 0x0247 581 JUMPI 582 ASSERT_FAIL 583 JUMPDEST 584 POP 585 JUMP 586 STOP ================================================ FILE: tests/testdata/outputs_expected/exceptions.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/kinds_of_calls.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x006d 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x141f32ff 60 EQ 61 PUSH2 0x0072 64 JUMPI 65 DUP1 66 PUSH4 0x2e52d606 71 EQ 72 PUSH2 0x00b4 75 JUMPI 76 DUP1 77 PUSH4 0x67e404ce 82 EQ 83 PUSH2 0x00dd 86 JUMPI 87 DUP1 88 PUSH4 0x9b58bc26 93 EQ 94 PUSH2 0x0132 97 JUMPI 98 DUP1 99 PUSH4 0xeea4c864 104 EQ 105 PUSH2 0x0174 108 JUMPI 109 JUMPDEST 110 PUSH1 0x00 112 DUP1 113 REVERT 114 JUMPDEST 115 CALLVALUE 116 ISZERO 117 PUSH2 0x007d 120 JUMPI 121 PUSH1 0x00 123 DUP1 124 REVERT 125 JUMPDEST 126 PUSH2 0x00b2 129 PUSH1 0x04 131 DUP1 132 DUP1 133 CALLDATALOAD 134 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 155 AND 156 SWAP1 157 PUSH1 0x20 159 ADD 160 SWAP1 161 SWAP2 162 SWAP1 163 DUP1 164 CALLDATALOAD 165 SWAP1 166 PUSH1 0x20 168 ADD 169 SWAP1 170 SWAP2 171 SWAP1 172 POP 173 POP 174 PUSH2 0x01b6 177 JUMP 178 JUMPDEST 179 STOP 180 JUMPDEST 181 CALLVALUE 182 ISZERO 183 PUSH2 0x00bf 186 JUMPI 187 PUSH1 0x00 189 DUP1 190 REVERT 191 JUMPDEST 192 PUSH2 0x00c7 195 PUSH2 0x0273 198 JUMP 199 JUMPDEST 200 PUSH1 0x40 202 MLOAD 203 DUP1 204 DUP3 205 DUP2 206 MSTORE 207 PUSH1 0x20 209 ADD 210 SWAP2 211 POP 212 POP 213 PUSH1 0x40 215 MLOAD 216 DUP1 217 SWAP2 218 SUB 219 SWAP1 220 RETURN 221 JUMPDEST 222 CALLVALUE 223 ISZERO 224 PUSH2 0x00e8 227 JUMPI 228 PUSH1 0x00 230 DUP1 231 REVERT 232 JUMPDEST 233 PUSH2 0x00f0 236 PUSH2 0x0279 239 JUMP 240 JUMPDEST 241 PUSH1 0x40 243 MLOAD 244 DUP1 245 DUP3 246 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 267 AND 268 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 289 AND 290 DUP2 291 MSTORE 292 PUSH1 0x20 294 ADD 295 SWAP2 296 POP 297 POP 298 PUSH1 0x40 300 MLOAD 301 DUP1 302 SWAP2 303 SUB 304 SWAP1 305 RETURN 306 JUMPDEST 307 CALLVALUE 308 ISZERO 309 PUSH2 0x013d 312 JUMPI 313 PUSH1 0x00 315 DUP1 316 REVERT 317 JUMPDEST 318 PUSH2 0x0172 321 PUSH1 0x04 323 DUP1 324 DUP1 325 CALLDATALOAD 326 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 347 AND 348 SWAP1 349 PUSH1 0x20 351 ADD 352 SWAP1 353 SWAP2 354 SWAP1 355 DUP1 356 CALLDATALOAD 357 SWAP1 358 PUSH1 0x20 360 ADD 361 SWAP1 362 SWAP2 363 SWAP1 364 POP 365 POP 366 PUSH2 0x029f 369 JUMP 370 JUMPDEST 371 STOP 372 JUMPDEST 373 CALLVALUE 374 ISZERO 375 PUSH2 0x017f 378 JUMPI 379 PUSH1 0x00 381 DUP1 382 REVERT 383 JUMPDEST 384 PUSH2 0x01b4 387 PUSH1 0x04 389 DUP1 390 DUP1 391 CALLDATALOAD 392 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 413 AND 414 SWAP1 415 PUSH1 0x20 417 ADD 418 SWAP1 419 SWAP2 420 SWAP1 421 DUP1 422 CALLDATALOAD 423 SWAP1 424 PUSH1 0x20 426 ADD 427 SWAP1 428 SWAP2 429 SWAP1 430 POP 431 POP 432 PUSH2 0x035a 435 JUMP 436 JUMPDEST 437 STOP 438 JUMPDEST 439 DUP2 440 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 461 AND 462 PUSH1 0x40 464 MLOAD 465 DUP1 466 DUP1 467 PUSH32 0x7365744e2875696e743235362900000000000000000000000000000000000000 500 DUP2 501 MSTORE 502 POP 503 PUSH1 0x0d 505 ADD 506 SWAP1 507 POP 508 PUSH1 0x40 510 MLOAD 511 DUP1 512 SWAP2 513 SUB 514 SWAP1 515 SHA3 516 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 546 SWAP1 547 DIV 548 DUP3 549 PUSH1 0x40 551 MLOAD 552 DUP3 553 PUSH4 0xffffffff 558 AND 559 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 589 MUL 590 DUP2 591 MSTORE 592 PUSH1 0x04 594 ADD 595 DUP1 596 DUP3 597 DUP2 598 MSTORE 599 PUSH1 0x20 601 ADD 602 SWAP2 603 POP 604 POP 605 PUSH1 0x00 607 PUSH1 0x40 609 MLOAD 610 DUP1 611 DUP4 612 SUB 613 DUP2 614 PUSH1 0x00 616 DUP8 617 GAS 618 CALLCODE 619 SWAP3 620 POP 621 POP 622 POP 623 POP 624 POP 625 POP 626 JUMP 627 JUMPDEST 628 PUSH1 0x00 630 SLOAD 631 DUP2 632 JUMP 633 JUMPDEST 634 PUSH1 0x01 636 PUSH1 0x00 638 SWAP1 639 SLOAD 640 SWAP1 641 PUSH2 0x0100 644 EXP 645 SWAP1 646 DIV 647 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 668 AND 669 DUP2 670 JUMP 671 JUMPDEST 672 DUP2 673 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 694 AND 695 PUSH1 0x40 697 MLOAD 698 DUP1 699 DUP1 700 PUSH32 0x7365744e2875696e743235362900000000000000000000000000000000000000 733 DUP2 734 MSTORE 735 POP 736 PUSH1 0x0d 738 ADD 739 SWAP1 740 POP 741 PUSH1 0x40 743 MLOAD 744 DUP1 745 SWAP2 746 SUB 747 SWAP1 748 SHA3 749 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 779 SWAP1 780 DIV 781 DUP3 782 PUSH1 0x40 784 MLOAD 785 DUP3 786 PUSH4 0xffffffff 791 AND 792 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 822 MUL 823 DUP2 824 MSTORE 825 PUSH1 0x04 827 ADD 828 DUP1 829 DUP3 830 DUP2 831 MSTORE 832 PUSH1 0x20 834 ADD 835 SWAP2 836 POP 837 POP 838 PUSH1 0x00 840 PUSH1 0x40 842 MLOAD 843 DUP1 844 DUP4 845 SUB 846 DUP2 847 DUP7 848 GAS 849 DELEGATECALL 850 SWAP3 851 POP 852 POP 853 POP 854 POP 855 POP 856 POP 857 JUMP 858 JUMPDEST 859 DUP2 860 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 881 AND 882 PUSH1 0x40 884 MLOAD 885 DUP1 886 DUP1 887 PUSH32 0x7365744e2875696e743235362900000000000000000000000000000000000000 920 DUP2 921 MSTORE 922 POP 923 PUSH1 0x0d 925 ADD 926 SWAP1 927 POP 928 PUSH1 0x40 930 MLOAD 931 DUP1 932 SWAP2 933 SUB 934 SWAP1 935 SHA3 936 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 966 SWAP1 967 DIV 968 DUP3 969 PUSH1 0x40 971 MLOAD 972 DUP3 973 PUSH4 0xffffffff 978 AND 979 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 1009 MUL 1010 DUP2 1011 MSTORE 1012 PUSH1 0x04 1014 ADD 1015 DUP1 1016 DUP3 1017 DUP2 1018 MSTORE 1019 PUSH1 0x20 1021 ADD 1022 SWAP2 1023 POP 1024 POP 1025 PUSH1 0x00 1027 PUSH1 0x40 1029 MLOAD 1030 DUP1 1031 DUP4 1032 SUB 1033 DUP2 1034 PUSH1 0x00 1036 DUP8 1037 GAS 1038 CALL 1039 SWAP3 1040 POP 1041 POP 1042 POP 1043 POP 1044 POP 1045 POP 1046 JUMP 1047 STOP ================================================ FILE: tests/testdata/outputs_expected/kinds_of_calls.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/metacoin.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x004c 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x27e235e3 60 EQ 61 PUSH2 0x0051 64 JUMPI 65 DUP1 66 PUSH4 0x412664ae 71 EQ 72 PUSH2 0x009e 75 JUMPI 76 JUMPDEST 77 PUSH1 0x00 79 DUP1 80 REVERT 81 JUMPDEST 82 CALLVALUE 83 ISZERO 84 PUSH2 0x005c 87 JUMPI 88 PUSH1 0x00 90 DUP1 91 REVERT 92 JUMPDEST 93 PUSH2 0x0088 96 PUSH1 0x04 98 DUP1 99 DUP1 100 CALLDATALOAD 101 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 122 AND 123 SWAP1 124 PUSH1 0x20 126 ADD 127 SWAP1 128 SWAP2 129 SWAP1 130 POP 131 POP 132 PUSH2 0x00f8 135 JUMP 136 JUMPDEST 137 PUSH1 0x40 139 MLOAD 140 DUP1 141 DUP3 142 DUP2 143 MSTORE 144 PUSH1 0x20 146 ADD 147 SWAP2 148 POP 149 POP 150 PUSH1 0x40 152 MLOAD 153 DUP1 154 SWAP2 155 SUB 156 SWAP1 157 RETURN 158 JUMPDEST 159 CALLVALUE 160 ISZERO 161 PUSH2 0x00a9 164 JUMPI 165 PUSH1 0x00 167 DUP1 168 REVERT 169 JUMPDEST 170 PUSH2 0x00de 173 PUSH1 0x04 175 DUP1 176 DUP1 177 CALLDATALOAD 178 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 199 AND 200 SWAP1 201 PUSH1 0x20 203 ADD 204 SWAP1 205 SWAP2 206 SWAP1 207 DUP1 208 CALLDATALOAD 209 SWAP1 210 PUSH1 0x20 212 ADD 213 SWAP1 214 SWAP2 215 SWAP1 216 POP 217 POP 218 PUSH2 0x0110 221 JUMP 222 JUMPDEST 223 PUSH1 0x40 225 MLOAD 226 DUP1 227 DUP3 228 ISZERO 229 ISZERO 230 ISZERO 231 ISZERO 232 DUP2 233 MSTORE 234 PUSH1 0x20 236 ADD 237 SWAP2 238 POP 239 POP 240 PUSH1 0x40 242 MLOAD 243 DUP1 244 SWAP2 245 SUB 246 SWAP1 247 RETURN 248 JUMPDEST 249 PUSH1 0x00 251 PUSH1 0x20 253 MSTORE 254 DUP1 255 PUSH1 0x00 257 MSTORE 258 PUSH1 0x40 260 PUSH1 0x00 262 SHA3 263 PUSH1 0x00 265 SWAP2 266 POP 267 SWAP1 268 POP 269 SLOAD 270 DUP2 271 JUMP 272 JUMPDEST 273 PUSH1 0x00 275 DUP2 276 PUSH1 0x00 278 DUP1 279 CALLER 280 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 301 AND 302 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 323 AND 324 DUP2 325 MSTORE 326 PUSH1 0x20 328 ADD 329 SWAP1 330 DUP2 331 MSTORE 332 PUSH1 0x20 334 ADD 335 PUSH1 0x00 337 SHA3 338 SLOAD 339 LT 340 ISZERO 341 PUSH2 0x0161 344 JUMPI 345 PUSH1 0x00 347 SWAP1 348 POP 349 PUSH2 0x01fe 352 JUMP 353 JUMPDEST 354 DUP2 355 PUSH1 0x00 357 DUP1 358 CALLER 359 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 380 AND 381 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 402 AND 403 DUP2 404 MSTORE 405 PUSH1 0x20 407 ADD 408 SWAP1 409 DUP2 410 MSTORE 411 PUSH1 0x20 413 ADD 414 PUSH1 0x00 416 SHA3 417 PUSH1 0x00 419 DUP3 420 DUP3 421 SLOAD 422 SUB 423 SWAP3 424 POP 425 POP 426 DUP2 427 SWAP1 428 SSTORE 429 POP 430 DUP2 431 PUSH1 0x00 433 DUP1 434 DUP6 435 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 456 AND 457 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 478 AND 479 DUP2 480 MSTORE 481 PUSH1 0x20 483 ADD 484 SWAP1 485 DUP2 486 MSTORE 487 PUSH1 0x20 489 ADD 490 PUSH1 0x00 492 SHA3 493 PUSH1 0x00 495 DUP3 496 DUP3 497 SLOAD 498 ADD 499 SWAP3 500 POP 501 POP 502 DUP2 503 SWAP1 504 SSTORE 505 POP 506 PUSH1 0x00 508 SWAP1 509 POP 510 JUMPDEST 511 SWAP3 512 SWAP2 513 POP 514 POP 515 JUMP 516 STOP ================================================ FILE: tests/testdata/outputs_expected/metacoin.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/multi_contracts.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH1 0x3f 11 JUMPI 12 PUSH1 0x00 14 CALLDATALOAD 15 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 45 SWAP1 46 DIV 47 PUSH4 0xffffffff 52 AND 53 DUP1 54 PUSH4 0x8a4068dd 59 EQ 60 PUSH1 0x44 62 JUMPI 63 JUMPDEST 64 PUSH1 0x00 66 DUP1 67 REVERT 68 JUMPDEST 69 CALLVALUE 70 ISZERO 71 PUSH1 0x4e 73 JUMPI 74 PUSH1 0x00 76 DUP1 77 REVERT 78 JUMPDEST 79 PUSH1 0x54 81 PUSH1 0x56 83 JUMP 84 JUMPDEST 85 STOP 86 JUMPDEST 87 CALLER 88 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 109 AND 110 PUSH2 0x08fc 113 PUSH8 0x1bc16d674ec80000 122 SWAP1 123 DUP2 124 ISZERO 125 MUL 126 SWAP1 127 PUSH1 0x40 129 MLOAD 130 PUSH1 0x00 132 PUSH1 0x40 134 MLOAD 135 DUP1 136 DUP4 137 SUB 138 DUP2 139 DUP6 140 DUP9 141 DUP9 142 CALL 143 SWAP4 144 POP 145 POP 146 POP 147 POP 148 ISZERO 149 ISZERO 150 PUSH1 0x9d 152 JUMPI 153 PUSH1 0x00 155 DUP1 156 REVERT 157 JUMPDEST 158 JUMP 159 STOP ================================================ FILE: tests/testdata/outputs_expected/multi_contracts.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/nonascii.sol.o.easm ================================================ 0 PUSH1 0x80 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x0041 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x24ff38a2 60 EQ 61 PUSH2 0x0046 64 JUMPI 65 JUMPDEST 66 PUSH1 0x00 68 DUP1 69 REVERT 70 JUMPDEST 71 CALLVALUE 72 DUP1 73 ISZERO 74 PUSH2 0x0052 77 JUMPI 78 PUSH1 0x00 80 DUP1 81 REVERT 82 JUMPDEST 83 POP 84 PUSH2 0x005b 87 PUSH2 0x00d6 90 JUMP 91 JUMPDEST 92 PUSH1 0x40 94 MLOAD 95 DUP1 96 DUP1 97 PUSH1 0x20 99 ADD 100 DUP3 101 DUP2 102 SUB 103 DUP3 104 MSTORE 105 DUP4 106 DUP2 107 DUP2 108 MLOAD 109 DUP2 110 MSTORE 111 PUSH1 0x20 113 ADD 114 SWAP2 115 POP 116 DUP1 117 MLOAD 118 SWAP1 119 PUSH1 0x20 121 ADD 122 SWAP1 123 DUP1 124 DUP4 125 DUP4 126 PUSH1 0x00 128 JUMPDEST 129 DUP4 130 DUP2 131 LT 132 ISZERO 133 PUSH2 0x009b 136 JUMPI 137 DUP1 138 DUP3 139 ADD 140 MLOAD 141 DUP2 142 DUP5 143 ADD 144 MSTORE 145 PUSH1 0x20 147 DUP2 148 ADD 149 SWAP1 150 POP 151 PUSH2 0x0080 154 JUMP 155 JUMPDEST 156 POP 157 POP 158 POP 159 POP 160 SWAP1 161 POP 162 SWAP1 163 DUP2 164 ADD 165 SWAP1 166 PUSH1 0x1f 168 AND 169 DUP1 170 ISZERO 171 PUSH2 0x00c8 174 JUMPI 175 DUP1 176 DUP3 177 SUB 178 DUP1 179 MLOAD 180 PUSH1 0x01 182 DUP4 183 PUSH1 0x20 185 SUB 186 PUSH2 0x0100 189 EXP 190 SUB 191 NOT 192 AND 193 DUP2 194 MSTORE 195 PUSH1 0x20 197 ADD 198 SWAP2 199 POP 200 JUMPDEST 201 POP 202 SWAP3 203 POP 204 POP 205 POP 206 PUSH1 0x40 208 MLOAD 209 DUP1 210 SWAP2 211 SUB 212 SWAP1 213 RETURN 214 JUMPDEST 215 PUSH1 0x60 217 PUSH1 0x40 219 DUP1 220 MLOAD 221 SWAP1 222 DUP2 223 ADD 224 PUSH1 0x40 226 MSTORE 227 DUP1 228 PUSH1 0x17 230 DUP2 231 MSTORE 232 PUSH1 0x20 234 ADD 235 PUSH32 0xd0a5d18dd0bbd0bbd0bed18320d092d0bed180d0bbd0b4000000000000000000 268 DUP2 269 MSTORE 270 POP 271 SWAP1 272 POP 273 SWAP1 274 JUMP 275 STOP ================================================ FILE: tests/testdata/outputs_expected/nonascii.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/origin.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x004c 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x8da5cb5b 60 EQ 61 PUSH2 0x0051 64 JUMPI 65 DUP1 66 PUSH4 0xf2fde38b 71 EQ 72 PUSH2 0x00a6 75 JUMPI 76 JUMPDEST 77 PUSH1 0x00 79 DUP1 80 REVERT 81 JUMPDEST 82 CALLVALUE 83 ISZERO 84 PUSH2 0x005c 87 JUMPI 88 PUSH1 0x00 90 DUP1 91 REVERT 92 JUMPDEST 93 PUSH2 0x0064 96 PUSH2 0x00df 99 JUMP 100 JUMPDEST 101 PUSH1 0x40 103 MLOAD 104 DUP1 105 DUP3 106 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 127 AND 128 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 149 AND 150 DUP2 151 MSTORE 152 PUSH1 0x20 154 ADD 155 SWAP2 156 POP 157 POP 158 PUSH1 0x40 160 MLOAD 161 DUP1 162 SWAP2 163 SUB 164 SWAP1 165 RETURN 166 JUMPDEST 167 CALLVALUE 168 ISZERO 169 PUSH2 0x00b1 172 JUMPI 173 PUSH1 0x00 175 DUP1 176 REVERT 177 JUMPDEST 178 PUSH2 0x00dd 181 PUSH1 0x04 183 DUP1 184 DUP1 185 CALLDATALOAD 186 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 207 AND 208 SWAP1 209 PUSH1 0x20 211 ADD 212 SWAP1 213 SWAP2 214 SWAP1 215 POP 216 POP 217 PUSH2 0x0104 220 JUMP 221 JUMPDEST 222 STOP 223 JUMPDEST 224 PUSH1 0x00 226 DUP1 227 SWAP1 228 SLOAD 229 SWAP1 230 PUSH2 0x0100 233 EXP 234 SWAP1 235 DIV 236 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 257 AND 258 DUP2 259 JUMP 260 JUMPDEST 261 PUSH1 0x00 263 DUP1 264 SWAP1 265 SLOAD 266 SWAP1 267 PUSH2 0x0100 270 EXP 271 SWAP1 272 DIV 273 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 294 AND 295 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 316 AND 317 ORIGIN 318 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 339 AND 340 EQ 341 ISZERO 342 ISZERO 343 PUSH2 0x015f 346 JUMPI 347 PUSH1 0x00 349 DUP1 350 REVERT 351 JUMPDEST 352 PUSH1 0x00 354 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 375 AND 376 DUP2 377 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 398 AND 399 EQ 400 ISZERO 401 ISZERO 402 PUSH2 0x01d6 405 JUMPI 406 DUP1 407 PUSH1 0x00 409 DUP1 410 PUSH2 0x0100 413 EXP 414 DUP2 415 SLOAD 416 DUP2 417 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 438 MUL 439 NOT 440 AND 441 SWAP1 442 DUP4 443 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 464 AND 465 MUL 466 OR 467 SWAP1 468 SSTORE 469 POP 470 JUMPDEST 471 POP 472 JUMP 473 STOP ================================================ FILE: tests/testdata/outputs_expected/origin.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/overflow.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x0062 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x18160ddd 60 EQ 61 PUSH2 0x0067 64 JUMPI 65 DUP1 66 PUSH4 0x6241bfd1 71 EQ 72 PUSH2 0x0090 75 JUMPI 76 DUP1 77 PUSH4 0x70a08231 82 EQ 83 PUSH2 0x00b3 86 JUMPI 87 DUP1 88 PUSH4 0xa3210e87 93 EQ 94 PUSH2 0x0100 97 JUMPI 98 JUMPDEST 99 PUSH1 0x00 101 DUP1 102 REVERT 103 JUMPDEST 104 CALLVALUE 105 ISZERO 106 PUSH2 0x0072 109 JUMPI 110 PUSH1 0x00 112 DUP1 113 REVERT 114 JUMPDEST 115 PUSH2 0x007a 118 PUSH2 0x015a 121 JUMP 122 JUMPDEST 123 PUSH1 0x40 125 MLOAD 126 DUP1 127 DUP3 128 DUP2 129 MSTORE 130 PUSH1 0x20 132 ADD 133 SWAP2 134 POP 135 POP 136 PUSH1 0x40 138 MLOAD 139 DUP1 140 SWAP2 141 SUB 142 SWAP1 143 RETURN 144 JUMPDEST 145 CALLVALUE 146 ISZERO 147 PUSH2 0x009b 150 JUMPI 151 PUSH1 0x00 153 DUP1 154 REVERT 155 JUMPDEST 156 PUSH2 0x00b1 159 PUSH1 0x04 161 DUP1 162 DUP1 163 CALLDATALOAD 164 SWAP1 165 PUSH1 0x20 167 ADD 168 SWAP1 169 SWAP2 170 SWAP1 171 POP 172 POP 173 PUSH2 0x0160 176 JUMP 177 JUMPDEST 178 STOP 179 JUMPDEST 180 CALLVALUE 181 ISZERO 182 PUSH2 0x00be 185 JUMPI 186 PUSH1 0x00 188 DUP1 189 REVERT 190 JUMPDEST 191 PUSH2 0x00ea 194 PUSH1 0x04 196 DUP1 197 DUP1 198 CALLDATALOAD 199 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 220 AND 221 SWAP1 222 PUSH1 0x20 224 ADD 225 SWAP1 226 SWAP2 227 SWAP1 228 POP 229 POP 230 PUSH2 0x01ab 233 JUMP 234 JUMPDEST 235 PUSH1 0x40 237 MLOAD 238 DUP1 239 DUP3 240 DUP2 241 MSTORE 242 PUSH1 0x20 244 ADD 245 SWAP2 246 POP 247 POP 248 PUSH1 0x40 250 MLOAD 251 DUP1 252 SWAP2 253 SUB 254 SWAP1 255 RETURN 256 JUMPDEST 257 CALLVALUE 258 ISZERO 259 PUSH2 0x010b 262 JUMPI 263 PUSH1 0x00 265 DUP1 266 REVERT 267 JUMPDEST 268 PUSH2 0x0140 271 PUSH1 0x04 273 DUP1 274 DUP1 275 CALLDATALOAD 276 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 297 AND 298 SWAP1 299 PUSH1 0x20 301 ADD 302 SWAP1 303 SWAP2 304 SWAP1 305 DUP1 306 CALLDATALOAD 307 SWAP1 308 PUSH1 0x20 310 ADD 311 SWAP1 312 SWAP2 313 SWAP1 314 POP 315 POP 316 PUSH2 0x01f3 319 JUMP 320 JUMPDEST 321 PUSH1 0x40 323 MLOAD 324 DUP1 325 DUP3 326 ISZERO 327 ISZERO 328 ISZERO 329 ISZERO 330 DUP2 331 MSTORE 332 PUSH1 0x20 334 ADD 335 SWAP2 336 POP 337 POP 338 PUSH1 0x40 340 MLOAD 341 DUP1 342 SWAP2 343 SUB 344 SWAP1 345 RETURN 346 JUMPDEST 347 PUSH1 0x01 349 SLOAD 350 DUP2 351 JUMP 352 JUMPDEST 353 DUP1 354 PUSH1 0x01 356 DUP2 357 SWAP1 358 SSTORE 359 PUSH1 0x00 361 DUP1 362 CALLER 363 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 384 AND 385 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 406 AND 407 DUP2 408 MSTORE 409 PUSH1 0x20 411 ADD 412 SWAP1 413 DUP2 414 MSTORE 415 PUSH1 0x20 417 ADD 418 PUSH1 0x00 420 SHA3 421 DUP2 422 SWAP1 423 SSTORE 424 POP 425 POP 426 JUMP 427 JUMPDEST 428 PUSH1 0x00 430 DUP1 431 PUSH1 0x00 433 DUP4 434 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 455 AND 456 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 477 AND 478 DUP2 479 MSTORE 480 PUSH1 0x20 482 ADD 483 SWAP1 484 DUP2 485 MSTORE 486 PUSH1 0x20 488 ADD 489 PUSH1 0x00 491 SHA3 492 SLOAD 493 SWAP1 494 POP 495 SWAP2 496 SWAP1 497 POP 498 JUMP 499 JUMPDEST 500 PUSH1 0x00 502 DUP1 503 DUP3 504 PUSH1 0x00 506 DUP1 507 CALLER 508 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 529 AND 530 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 551 AND 552 DUP2 553 MSTORE 554 PUSH1 0x20 556 ADD 557 SWAP1 558 DUP2 559 MSTORE 560 PUSH1 0x20 562 ADD 563 PUSH1 0x00 565 SHA3 566 SLOAD 567 SUB 568 LT 569 ISZERO 570 ISZERO 571 ISZERO 572 PUSH2 0x0244 575 JUMPI 576 PUSH1 0x00 578 DUP1 579 REVERT 580 JUMPDEST 581 DUP2 582 PUSH1 0x00 584 DUP1 585 CALLER 586 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 607 AND 608 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 629 AND 630 DUP2 631 MSTORE 632 PUSH1 0x20 634 ADD 635 SWAP1 636 DUP2 637 MSTORE 638 PUSH1 0x20 640 ADD 641 PUSH1 0x00 643 SHA3 644 PUSH1 0x00 646 DUP3 647 DUP3 648 SLOAD 649 SUB 650 SWAP3 651 POP 652 POP 653 DUP2 654 SWAP1 655 SSTORE 656 POP 657 DUP2 658 PUSH1 0x00 660 DUP1 661 DUP6 662 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 683 AND 684 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 705 AND 706 DUP2 707 MSTORE 708 PUSH1 0x20 710 ADD 711 SWAP1 712 DUP2 713 MSTORE 714 PUSH1 0x20 716 ADD 717 PUSH1 0x00 719 SHA3 720 PUSH1 0x00 722 DUP3 723 DUP3 724 SLOAD 725 ADD 726 SWAP3 727 POP 728 POP 729 DUP2 730 SWAP1 731 SSTORE 732 POP 733 PUSH1 0x02 735 PUSH1 0x00 737 DUP1 738 DUP6 739 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 760 AND 761 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 782 AND 783 DUP2 784 MSTORE 785 PUSH1 0x20 787 ADD 788 SWAP1 789 DUP2 790 MSTORE 791 PUSH1 0x20 793 ADD 794 PUSH1 0x00 796 SHA3 797 DUP2 798 SWAP1 799 SSTORE 800 POP 801 PUSH1 0x01 803 SWAP1 804 POP 805 SWAP3 806 SWAP2 807 POP 808 POP 809 JUMP 810 STOP ================================================ FILE: tests/testdata/outputs_expected/overflow.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/returnvalue.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x004c 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x633ab5e0 60 EQ 61 PUSH2 0x0051 64 JUMPI 65 DUP1 66 PUSH4 0xe3bea282 71 EQ 72 PUSH2 0x0066 75 JUMPI 76 JUMPDEST 77 PUSH1 0x00 79 DUP1 80 REVERT 81 JUMPDEST 82 CALLVALUE 83 ISZERO 84 PUSH2 0x005c 87 JUMPI 88 PUSH1 0x00 90 DUP1 91 REVERT 92 JUMPDEST 93 PUSH2 0x0064 96 PUSH2 0x007b 99 JUMP 100 JUMPDEST 101 STOP 102 JUMPDEST 103 CALLVALUE 104 ISZERO 105 PUSH2 0x0071 108 JUMPI 109 PUSH1 0x00 111 DUP1 112 REVERT 113 JUMPDEST 114 PUSH2 0x0079 117 PUSH2 0x00d4 120 JUMP 121 JUMPDEST 122 STOP 123 JUMPDEST 124 PUSH1 0x00 126 DUP1 127 SWAP1 128 SLOAD 129 SWAP1 130 PUSH2 0x0100 133 EXP 134 SWAP1 135 DIV 136 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 157 AND 158 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 179 AND 180 PUSH1 0x40 182 MLOAD 183 PUSH1 0x00 185 PUSH1 0x40 187 MLOAD 188 DUP1 189 DUP4 190 SUB 191 DUP2 192 PUSH1 0x00 194 DUP7 195 GAS 196 CALL 197 SWAP2 198 POP 199 POP 200 ISZERO 201 ISZERO 202 PUSH2 0x00d2 205 JUMPI 206 PUSH1 0x00 208 DUP1 209 REVERT 210 JUMPDEST 211 JUMP 212 JUMPDEST 213 PUSH1 0x00 215 DUP1 216 SWAP1 217 SLOAD 218 SWAP1 219 PUSH2 0x0100 222 EXP 223 SWAP1 224 DIV 225 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 246 AND 247 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 268 AND 269 PUSH1 0x40 271 MLOAD 272 PUSH1 0x00 274 PUSH1 0x40 276 MLOAD 277 DUP1 278 DUP4 279 SUB 280 DUP2 281 PUSH1 0x00 283 DUP7 284 GAS 285 CALL 286 SWAP2 287 POP 288 POP 289 POP 290 JUMP 291 STOP ================================================ FILE: tests/testdata/outputs_expected/returnvalue.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/suicide.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH1 0x3f 11 JUMPI 12 PUSH1 0x00 14 CALLDATALOAD 15 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 45 SWAP1 46 DIV 47 PUSH4 0xffffffff 52 AND 53 DUP1 54 PUSH4 0xcbf0b0c0 59 EQ 60 PUSH1 0x44 62 JUMPI 63 JUMPDEST 64 PUSH1 0x00 66 DUP1 67 REVERT 68 JUMPDEST 69 CALLVALUE 70 ISZERO 71 PUSH1 0x4e 73 JUMPI 74 PUSH1 0x00 76 DUP1 77 REVERT 78 JUMPDEST 79 PUSH1 0x78 81 PUSH1 0x04 83 DUP1 84 DUP1 85 CALLDATALOAD 86 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 107 AND 108 SWAP1 109 PUSH1 0x20 111 ADD 112 SWAP1 113 SWAP2 114 SWAP1 115 POP 116 POP 117 PUSH1 0x7a 119 JUMP 120 JUMPDEST 121 STOP 122 JUMPDEST 123 DUP1 124 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 145 AND 146 SUICIDE 147 STOP ================================================ FILE: tests/testdata/outputs_expected/suicide.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/testdata/outputs_expected/underflow.sol.o.easm ================================================ 0 PUSH1 0x60 2 PUSH1 0x40 4 MSTORE 5 PUSH1 0x04 7 CALLDATASIZE 8 LT 9 PUSH2 0x0062 12 JUMPI 13 PUSH1 0x00 15 CALLDATALOAD 16 PUSH29 0x0100000000000000000000000000000000000000000000000000000000 46 SWAP1 47 DIV 48 PUSH4 0xffffffff 53 AND 54 DUP1 55 PUSH4 0x18160ddd 60 EQ 61 PUSH2 0x0067 64 JUMPI 65 DUP1 66 PUSH4 0x6241bfd1 71 EQ 72 PUSH2 0x0090 75 JUMPI 76 DUP1 77 PUSH4 0x70a08231 82 EQ 83 PUSH2 0x00b3 86 JUMPI 87 DUP1 88 PUSH4 0xa3210e87 93 EQ 94 PUSH2 0x0100 97 JUMPI 98 JUMPDEST 99 PUSH1 0x00 101 DUP1 102 REVERT 103 JUMPDEST 104 CALLVALUE 105 ISZERO 106 PUSH2 0x0072 109 JUMPI 110 PUSH1 0x00 112 DUP1 113 REVERT 114 JUMPDEST 115 PUSH2 0x007a 118 PUSH2 0x015a 121 JUMP 122 JUMPDEST 123 PUSH1 0x40 125 MLOAD 126 DUP1 127 DUP3 128 DUP2 129 MSTORE 130 PUSH1 0x20 132 ADD 133 SWAP2 134 POP 135 POP 136 PUSH1 0x40 138 MLOAD 139 DUP1 140 SWAP2 141 SUB 142 SWAP1 143 RETURN 144 JUMPDEST 145 CALLVALUE 146 ISZERO 147 PUSH2 0x009b 150 JUMPI 151 PUSH1 0x00 153 DUP1 154 REVERT 155 JUMPDEST 156 PUSH2 0x00b1 159 PUSH1 0x04 161 DUP1 162 DUP1 163 CALLDATALOAD 164 SWAP1 165 PUSH1 0x20 167 ADD 168 SWAP1 169 SWAP2 170 SWAP1 171 POP 172 POP 173 PUSH2 0x0160 176 JUMP 177 JUMPDEST 178 STOP 179 JUMPDEST 180 CALLVALUE 181 ISZERO 182 PUSH2 0x00be 185 JUMPI 186 PUSH1 0x00 188 DUP1 189 REVERT 190 JUMPDEST 191 PUSH2 0x00ea 194 PUSH1 0x04 196 DUP1 197 DUP1 198 CALLDATALOAD 199 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 220 AND 221 SWAP1 222 PUSH1 0x20 224 ADD 225 SWAP1 226 SWAP2 227 SWAP1 228 POP 229 POP 230 PUSH2 0x01ab 233 JUMP 234 JUMPDEST 235 PUSH1 0x40 237 MLOAD 238 DUP1 239 DUP3 240 DUP2 241 MSTORE 242 PUSH1 0x20 244 ADD 245 SWAP2 246 POP 247 POP 248 PUSH1 0x40 250 MLOAD 251 DUP1 252 SWAP2 253 SUB 254 SWAP1 255 RETURN 256 JUMPDEST 257 CALLVALUE 258 ISZERO 259 PUSH2 0x010b 262 JUMPI 263 PUSH1 0x00 265 DUP1 266 REVERT 267 JUMPDEST 268 PUSH2 0x0140 271 PUSH1 0x04 273 DUP1 274 DUP1 275 CALLDATALOAD 276 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 297 AND 298 SWAP1 299 PUSH1 0x20 301 ADD 302 SWAP1 303 SWAP2 304 SWAP1 305 DUP1 306 CALLDATALOAD 307 SWAP1 308 PUSH1 0x20 310 ADD 311 SWAP1 312 SWAP2 313 SWAP1 314 POP 315 POP 316 PUSH2 0x01f3 319 JUMP 320 JUMPDEST 321 PUSH1 0x40 323 MLOAD 324 DUP1 325 DUP3 326 ISZERO 327 ISZERO 328 ISZERO 329 ISZERO 330 DUP2 331 MSTORE 332 PUSH1 0x20 334 ADD 335 SWAP2 336 POP 337 POP 338 PUSH1 0x40 340 MLOAD 341 DUP1 342 SWAP2 343 SUB 344 SWAP1 345 RETURN 346 JUMPDEST 347 PUSH1 0x01 349 SLOAD 350 DUP2 351 JUMP 352 JUMPDEST 353 DUP1 354 PUSH1 0x01 356 DUP2 357 SWAP1 358 SSTORE 359 PUSH1 0x00 361 DUP1 362 CALLER 363 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 384 AND 385 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 406 AND 407 DUP2 408 MSTORE 409 PUSH1 0x20 411 ADD 412 SWAP1 413 DUP2 414 MSTORE 415 PUSH1 0x20 417 ADD 418 PUSH1 0x00 420 SHA3 421 DUP2 422 SWAP1 423 SSTORE 424 POP 425 POP 426 JUMP 427 JUMPDEST 428 PUSH1 0x00 430 DUP1 431 PUSH1 0x00 433 DUP4 434 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 455 AND 456 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 477 AND 478 DUP2 479 MSTORE 480 PUSH1 0x20 482 ADD 483 SWAP1 484 DUP2 485 MSTORE 486 PUSH1 0x20 488 ADD 489 PUSH1 0x00 491 SHA3 492 SLOAD 493 SWAP1 494 POP 495 SWAP2 496 SWAP1 497 POP 498 JUMP 499 JUMPDEST 500 PUSH1 0x00 502 DUP1 503 DUP3 504 PUSH1 0x00 506 DUP1 507 CALLER 508 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 529 AND 530 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 551 AND 552 DUP2 553 MSTORE 554 PUSH1 0x20 556 ADD 557 SWAP1 558 DUP2 559 MSTORE 560 PUSH1 0x20 562 ADD 563 PUSH1 0x00 565 SHA3 566 SLOAD 567 SUB 568 LT 569 ISZERO 570 ISZERO 571 ISZERO 572 PUSH2 0x0244 575 JUMPI 576 PUSH1 0x00 578 DUP1 579 REVERT 580 JUMPDEST 581 DUP2 582 PUSH1 0x00 584 DUP1 585 CALLER 586 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 607 AND 608 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 629 AND 630 DUP2 631 MSTORE 632 PUSH1 0x20 634 ADD 635 SWAP1 636 DUP2 637 MSTORE 638 PUSH1 0x20 640 ADD 641 PUSH1 0x00 643 SHA3 644 PUSH1 0x00 646 DUP3 647 DUP3 648 SLOAD 649 SUB 650 SWAP3 651 POP 652 POP 653 DUP2 654 SWAP1 655 SSTORE 656 POP 657 DUP2 658 PUSH1 0x00 660 DUP1 661 DUP6 662 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 683 AND 684 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 705 AND 706 DUP2 707 MSTORE 708 PUSH1 0x20 710 ADD 711 SWAP1 712 DUP2 713 MSTORE 714 PUSH1 0x20 716 ADD 717 PUSH1 0x00 719 SHA3 720 PUSH1 0x00 722 DUP3 723 DUP3 724 SLOAD 725 ADD 726 SWAP3 727 POP 728 POP 729 DUP2 730 SWAP1 731 SSTORE 732 POP 733 PUSH1 0x01 735 SWAP1 736 POP 737 SWAP3 738 SWAP2 739 POP 740 POP 741 JUMP 742 STOP ================================================ FILE: tests/testdata/outputs_expected/underflow.sol.o.graph.html ================================================ Call Graph

Mythril / Ethereum LASER Symbolic VM

================================================ FILE: tests/teststorage/contractstorage.fs.tmp ================================================ ================================================ FILE: tests/util_tests.py ================================================ import pytest from mythril.ethereum.util import extract_version test_data = ( ("pragma solidity 0.5.0\n", ["0.5.0"]), ("pragma solidity =0.5.0\n", ["0.5.0"]), ("pragma solidity ^0.4.26\n", ["0.4.26"]), ("pragma solidity ^0.6.3;\n", [f"0.6.{x}" for x in range(3, 13)]), ("pragma solidity ^0.6.3 ;\n", [f"0.6.{x}" for x in range(3, 13)]), ( "pragma solidity ^0.6.3; \n", [f"0.6.{x}" for x in range(3, 13)], ), ( "pragma solidity ^0.6.3 ; \n", [f"0.6.{x}" for x in range(3, 13)], ), ( """pragma solidity >=0.4.0 <0.6.0 ; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }""", [f"0.4.{x}" for x in range(11, 27)] + [f"0.5.{x}" for x in range(0, 18)], ), ( """ pragma solidity >=0.4.0 <0.6.0 ;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }""", [f"0.4.{x}" for x in range(11, 27)] + [f"0.5.{x}" for x in range(0, 18)], ), ( """ pragma solidity >=0.4.0 <0.6.0 ;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }""", [f"0.4.{x}" for x in range(11, 27)] + [f"0.5.{x}" for x in range(0, 18)], ), ( """ pragma solidity >= 0.5.0 < 0.6.0; ;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }""", [f"0.5.{x}" for x in range(0, 18)], ), ( """ pragma solidity >= 0 . 4 .0 < 0 . 6 . 0 ;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }""", [f"0.4.{x}" for x in range(11, 27)] + [f"0.5.{x}" for x in range(0, 18)], ), ) @pytest.mark.parametrize("input_,output", test_data) def test_sar(input_, output): assert extract_version(input_) in output ================================================ FILE: tox.ini ================================================ [tox] envlist = python3.7, python3.10, python3.12 [testenv] deps = pytest pytest-mock passenv = MYTHRIL_DIR,INFURA_ID allowlist_externals = mkdir commands = mkdir -p {toxinidir}/tests/testdata/outputs_current/ mkdir -p {toxinidir}/tests/testdata/outputs_current_laser_result/ py.test -v \ --junitxml={toxworkdir}/output/{envname}/junit.xml \ --disable-pytest-warnings \ {posargs} [testenv:py37] basepython = python3.7 setenv = COVERAGE_FILE = .coverage.{envname} deps = mypy==0.782 pytest pytest-mock pytest-cov allowlist_externals = mkdir commands = mypy --follow-imports=silent --warn-unused-ignores --ignore-missing-imports --no-strict-optional mythril mkdir -p {toxinidir}/tests/testdata/outputs_current/ mkdir -p {toxinidir}/tests/testdata/outputs_current_laser_result/ py.test -v \ --cov=mythril \ --cov-config=tox.ini \ --cov-report=xml:{toxworkdir}/output/{envname}/coverage.xml \ --cov-report=html:{toxworkdir}/output/{envname}/covhtml \ --junitxml={toxworkdir}/output/{envname}/junit.xml \ --disable-pytest-warnings \ {posargs} [testenv:py38] basepython = python3.8 setenv = COVERAGE_FILE = .coverage.{envname} deps = mypy==0.782 pytest pytest-mock pytest-cov passenv = MYTHRIL_DIR,INFURA_ID allowlist_externals = mkdir commands = mypy --follow-imports=silent --warn-unused-ignores --ignore-missing-imports --no-strict-optional mythril mkdir -p {toxinidir}/tests/testdata/outputs_current/ mkdir -p {toxinidir}/tests/testdata/outputs_current_laser_result/ py.test -v \ --cov=mythril \ --cov-config=tox.ini \ --cov-report=xml:{toxworkdir}/output/{envname}/coverage.xml \ --cov-report=html:{toxworkdir}/output/{envname}/covhtml \ --junitxml={toxworkdir}/output/{envname}/junit.xml \ --disable-pytest-warnings \ {posargs} [testenv:py39] basepython = python3.9 setenv = COVERAGE_FILE = .coverage.{envname} deps = mypy==0.782 pytest pytest-mock pytest-cov passenv = MYTHRIL_DIR,INFURA_ID allowlist_externals = mkdir commands = mypy --follow-imports=silent --warn-unused-ignores --ignore-missing-imports --no-strict-optional mythril mkdir -p {toxinidir}/tests/testdata/outputs_current/ mkdir -p {toxinidir}/tests/testdata/outputs_current_laser_result/ py.test -v \ --cov=mythril \ --cov-config=tox.ini \ --cov-report=xml:{toxworkdir}/output/{envname}/coverage.xml \ --cov-report=html:{toxworkdir}/output/{envname}/covhtml \ --junitxml={toxworkdir}/output/{envname}/junit.xml \ --disable-pytest-warnings \ {posargs} [coverage:report] omit = *__init__.py /usr/* *_test.py setup.py