From e7f7328b39d5fc74d15a0086e89f935b422232b5 Mon Sep 17 00:00:00 2001 From: Guillaume Claret Date: Tue, 21 May 2024 12:59:18 +0200 Subject: [PATCH] ci: add translation from Python --- .github/workflows/coq.yml | 12 +- .gitmodules | 3 + CoqOfPython/coq-of-python.opam | 4 +- CoqOfPython/ethereum/arrow_glacier/fork.v | 1159 ++++++++-------- CoqOfPython/ethereum/arrow_glacier/state.v | 3 - CoqOfPython/ethereum/arrow_glacier/trie.v | 29 +- .../vm/instructions/environment.v | 57 +- .../arrow_glacier/vm/instructions/log.v | 23 +- .../arrow_glacier/vm/instructions/stack.v | 79 +- .../arrow_glacier/vm/instructions/storage.v | 49 +- .../arrow_glacier/vm/instructions/system.v | 89 +- .../ethereum/arrow_glacier/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/berlin/fork.v | 1023 ++++++++------- CoqOfPython/ethereum/berlin/state.v | 3 - CoqOfPython/ethereum/berlin/transactions.v | 35 +- CoqOfPython/ethereum/berlin/trie.v | 29 +- .../berlin/vm/instructions/environment.v | 57 +- .../ethereum/berlin/vm/instructions/log.v | 23 +- .../ethereum/berlin/vm/instructions/stack.v | 79 +- .../ethereum/berlin/vm/instructions/storage.v | 49 +- .../ethereum/berlin/vm/instructions/system.v | 89 +- CoqOfPython/ethereum/berlin/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../berlin/vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/byzantium/fork.v | 1023 ++++++++------- CoqOfPython/ethereum/byzantium/state.v | 3 - CoqOfPython/ethereum/byzantium/trie.v | 29 +- .../byzantium/vm/instructions/environment.v | 57 +- .../ethereum/byzantium/vm/instructions/log.v | 23 +- .../byzantium/vm/instructions/stack.v | 79 +- .../byzantium/vm/instructions/storage.v | 23 +- .../byzantium/vm/instructions/system.v | 89 +- .../ethereum/byzantium/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- CoqOfPython/ethereum/cancun/fork.v | 791 ++++++----- CoqOfPython/ethereum/cancun/state.v | 3 - CoqOfPython/ethereum/cancun/trie.v | 29 +- .../cancun/vm/instructions/environment.v | 57 +- .../ethereum/cancun/vm/instructions/log.v | 23 +- .../ethereum/cancun/vm/instructions/stack.v | 79 +- .../ethereum/cancun/vm/instructions/storage.v | 69 +- .../ethereum/cancun/vm/instructions/system.v | 131 +- CoqOfPython/ethereum/cancun/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../cancun/vm/precompiled_contracts/blake2f.v | 71 +- .../precompiled_contracts/point_evaluation.v | 95 +- CoqOfPython/ethereum/constantinople/fork.v | 1023 ++++++++------- CoqOfPython/ethereum/constantinople/state.v | 3 - CoqOfPython/ethereum/constantinople/trie.v | 29 +- .../vm/instructions/environment.v | 57 +- .../constantinople/vm/instructions/log.v | 23 +- .../constantinople/vm/instructions/stack.v | 79 +- .../constantinople/vm/instructions/storage.v | 23 +- .../constantinople/vm/instructions/system.v | 89 +- .../ethereum/constantinople/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- CoqOfPython/ethereum/dao_fork/fork.v | 1067 ++++++++------- CoqOfPython/ethereum/dao_fork/state.v | 3 - CoqOfPython/ethereum/dao_fork/trie.v | 29 +- .../ethereum/dao_fork/vm/instructions/stack.v | 79 +- CoqOfPython/ethereum/frontier/fork.v | 991 ++++++++------ CoqOfPython/ethereum/frontier/state.v | 3 - CoqOfPython/ethereum/frontier/trie.v | 29 +- .../ethereum/frontier/vm/instructions/stack.v | 79 +- CoqOfPython/ethereum/gray_glacier/fork.v | 1159 ++++++++-------- CoqOfPython/ethereum/gray_glacier/state.v | 3 - CoqOfPython/ethereum/gray_glacier/trie.v | 29 +- .../vm/instructions/environment.v | 57 +- .../gray_glacier/vm/instructions/log.v | 23 +- .../gray_glacier/vm/instructions/stack.v | 79 +- .../gray_glacier/vm/instructions/storage.v | 49 +- .../gray_glacier/vm/instructions/system.v | 89 +- .../ethereum/gray_glacier/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/homestead/fork.v | 995 +++++++------- CoqOfPython/ethereum/homestead/state.v | 3 - CoqOfPython/ethereum/homestead/trie.v | 29 +- .../homestead/vm/instructions/stack.v | 79 +- CoqOfPython/ethereum/istanbul/fork.v | 1023 ++++++++------- CoqOfPython/ethereum/istanbul/state.v | 3 - CoqOfPython/ethereum/istanbul/trie.v | 29 +- .../istanbul/vm/instructions/environment.v | 57 +- .../ethereum/istanbul/vm/instructions/log.v | 23 +- .../ethereum/istanbul/vm/instructions/stack.v | 79 +- .../istanbul/vm/instructions/storage.v | 49 +- .../istanbul/vm/instructions/system.v | 89 +- .../ethereum/istanbul/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/london/fork.v | 1163 +++++++++-------- CoqOfPython/ethereum/london/state.v | 3 - CoqOfPython/ethereum/london/trie.v | 29 +- .../london/vm/instructions/environment.v | 57 +- .../ethereum/london/vm/instructions/log.v | 23 +- .../ethereum/london/vm/instructions/stack.v | 79 +- .../ethereum/london/vm/instructions/storage.v | 49 +- .../ethereum/london/vm/instructions/system.v | 89 +- CoqOfPython/ethereum/london/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../london/vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/muir_glacier/fork.v | 1023 ++++++++------- CoqOfPython/ethereum/muir_glacier/state.v | 3 - CoqOfPython/ethereum/muir_glacier/trie.v | 29 +- .../vm/instructions/environment.v | 57 +- .../muir_glacier/vm/instructions/log.v | 23 +- .../muir_glacier/vm/instructions/stack.v | 79 +- .../muir_glacier/vm/instructions/storage.v | 49 +- .../muir_glacier/vm/instructions/system.v | 89 +- .../ethereum/muir_glacier/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/paris/fork.v | 823 +++++++----- CoqOfPython/ethereum/paris/state.v | 3 - CoqOfPython/ethereum/paris/trie.v | 29 +- .../paris/vm/instructions/environment.v | 57 +- .../ethereum/paris/vm/instructions/log.v | 23 +- .../ethereum/paris/vm/instructions/stack.v | 79 +- .../ethereum/paris/vm/instructions/storage.v | 49 +- .../ethereum/paris/vm/instructions/system.v | 89 +- CoqOfPython/ethereum/paris/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../paris/vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/rlp.v | 1093 +++++++++------- CoqOfPython/ethereum/shanghai/fork.v | 849 ++++++------ CoqOfPython/ethereum/shanghai/state.v | 3 - CoqOfPython/ethereum/shanghai/trie.v | 29 +- .../shanghai/vm/instructions/environment.v | 57 +- .../ethereum/shanghai/vm/instructions/log.v | 23 +- .../ethereum/shanghai/vm/instructions/stack.v | 79 +- .../shanghai/vm/instructions/storage.v | 49 +- .../shanghai/vm/instructions/system.v | 131 +- .../ethereum/shanghai/vm/interpreter.v | 3 - .../vm/precompiled_contracts/alt_bn128.v | 95 +- .../vm/precompiled_contracts/blake2f.v | 71 +- CoqOfPython/ethereum/spurious_dragon/fork.v | 1023 ++++++++------- CoqOfPython/ethereum/spurious_dragon/state.v | 3 - CoqOfPython/ethereum/spurious_dragon/trie.v | 29 +- .../spurious_dragon/vm/instructions/stack.v | 79 +- .../ethereum/spurious_dragon/vm/interpreter.v | 3 - CoqOfPython/ethereum/tangerine_whistle/fork.v | 995 +++++++------- .../ethereum/tangerine_whistle/state.v | 3 - CoqOfPython/ethereum/tangerine_whistle/trie.v | 29 +- .../tangerine_whistle/vm/instructions/stack.v | 79 +- README.md | 34 +- ethereum-execution-specs | 1 + main.py | 12 +- 149 files changed, 12862 insertions(+), 10503 deletions(-) create mode 100644 .gitmodules create mode 160000 ethereum-execution-specs diff --git a/.github/workflows/coq.yml b/.github/workflows/coq.yml index 5949cec..f15e2c0 100644 --- a/.github/workflows/coq.yml +++ b/.github/workflows/coq.yml @@ -19,14 +19,24 @@ jobs: run: git submodule update --init --recursive - uses: coq-community/docker-coq-action@v1 with: - custom_image: coqorg/coq:8.17-ocaml-4.14-flambda + custom_image: coqorg/coq:8.19-ocaml-4.14-flambda custom_script: | startGroup "Install dependencies" opam install -y --deps-only CoqOfPython/coq-of-python.opam + sudo ln -s `which python3` /usr/bin/python + python --version endGroup startGroup "Set the rights" sudo chown -R $(whoami) . endGroup + startGroup "Translate the Python code to Coq" + cd ethereum-execution-specs/src + find ethereum -name "*.py" -print0 | xargs -0 -n 1 python ../../main.py + cd ../.. + endGroup + startGroup "Make sure there no differences" + git diff --exit-code + endGroup startGroup "Compile Coq translations" cd CoqOfPython make diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9cde2ac --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ethereum-execution-specs"] + path = ethereum-execution-specs + url = https://github.com/ethereum/execution-specs.git diff --git a/CoqOfPython/coq-of-python.opam b/CoqOfPython/coq-of-python.opam index 5204e4d..c06db5c 100644 --- a/CoqOfPython/coq-of-python.opam +++ b/CoqOfPython/coq-of-python.opam @@ -15,8 +15,8 @@ bug-reports: "https://github.com/formal-land/coq-of-python/issues" dev-repo: "git+https://github.com/formal-land/coq-of-python.git" depends: [ "ocaml" {>= "4.08"} - "coq" {>= "8.17.1" & < "8.18"} - "coq-hammer" {>= "1.3.2+8.17" & < "1.3.2+8.18"} + "coq" {>= "8.17.1" } + "coq-hammer" ] build: [ [make] diff --git a/CoqOfPython/ethereum/arrow_glacier/fork.v b/CoqOfPython/ethereum/arrow_glacier/fork.v index ef83d4b..4e4a373 100644 --- a/CoqOfPython/ethereum/arrow_glacier/fork.v +++ b/CoqOfPython/ethereum/arrow_glacier/fork.v @@ -56,9 +56,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -445,61 +442,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -571,21 +588,25 @@ Definition calculate_base_fee_per_gas : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ELASTICITY_MULTIPLIER" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_name (| globals, locals_stack, "block_gas_limit" |); - M.get_name (| globals, locals_stack, "parent_gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), + make_list [ + M.get_name (| globals, locals_stack, "block_gas_limit" |); + M.get_name (| globals, locals_stack, "parent_gas_limit" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -730,17 +751,21 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "expected_base_fee_per_gas" , M.call (| @@ -754,17 +779,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "parent_has_ommers" , Compare.not_eq (| @@ -772,48 +801,60 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -828,17 +869,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -855,17 +900,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -994,37 +1043,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -1060,17 +1117,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1095,28 +1156,36 @@ Definition check_transaction : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "priority_fee_per_gas" , M.call (| @@ -1141,17 +1210,21 @@ Definition check_transaction : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_price" , M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) @@ -1556,23 +1629,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1601,25 +1678,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1647,56 +1728,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1753,39 +1842,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1793,47 +1894,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1983,20 +2096,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -2044,46 +2161,58 @@ Definition process_transaction : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "max_gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "max_gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_fee" , BinOp.mult (| @@ -2688,47 +2817,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2788,37 +2925,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/arrow_glacier/state.v b/CoqOfPython/ethereum/arrow_glacier/state.v index 31a4df1..459b395 100644 --- a/CoqOfPython/ethereum/arrow_glacier/state.v +++ b/CoqOfPython/ethereum/arrow_glacier/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.arrow_glacier.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_arrow_glacier_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/arrow_glacier/trie.v b/CoqOfPython/ethereum/arrow_glacier/trie.v index 76a40aa..60165e7 100644 --- a/CoqOfPython/ethereum/arrow_glacier/trie.v +++ b/CoqOfPython/ethereum/arrow_glacier/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_london_imports_trie : IsImported globals "ethereum.london" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1112,17 +1109,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/environment.v b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/environment.v index f3ecb1b..1530e2e 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1301,38 +1298,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/log.v b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/log.v index 92ec5ae..fb5d350 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/log.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_blocks_imports_Log : IsImported globals "ethereum.arrow_glacier.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/stack.v b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/stack.v index 223f03b..60742d1 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_vm_imports_Evm : IsImported globals "ethereum.arrow_glacier.vm" "Evm". Axiom ethereum_arrow_glacier_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/storage.v b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/storage.v index e78757d..1771533 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_state_imports_get_storage : IsImported globals "ethereum.arrow_glacier.state" "get_storage". Axiom ethereum_arrow_glacier_state_imports_get_storage_original : @@ -192,17 +189,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -472,14 +473,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/system.v b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/system.v index 9e682ef..7eeb6a3 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/system.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -142,14 +139,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1170,28 +1171,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1661,14 +1666,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "originator" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "current_target" |) diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v b/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v index 217ea7d..64244d8 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_blocks_imports_Log : IsImported globals "ethereum.arrow_glacier.blocks" "Log". diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/alt_bn128.v index 4433032..a40d868 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_vm_imports_Evm : IsImported globals "ethereum.arrow_glacier.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/blake2f.v index a87737e..f0050b6 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_arrow_glacier_vm_imports_Evm : IsImported globals "ethereum.arrow_glacier.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/berlin/fork.v b/CoqOfPython/ethereum/berlin/fork.v index 27de206..fa82a35 100644 --- a/CoqOfPython/ethereum/berlin/fork.v +++ b/CoqOfPython/ethereum/berlin/fork.v @@ -56,9 +56,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -434,61 +431,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -558,63 +575,79 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -629,17 +662,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -656,17 +693,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -794,37 +835,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -856,17 +905,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1243,23 +1296,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1288,25 +1345,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1334,56 +1395,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1440,39 +1509,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1480,47 +1561,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1670,20 +1763,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1706,46 +1803,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2336,47 +2445,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2436,37 +2553,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/berlin/state.v b/CoqOfPython/ethereum/berlin/state.v index c1396f6..3b4d89b 100644 --- a/CoqOfPython/ethereum/berlin/state.v +++ b/CoqOfPython/ethereum/berlin/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.berlin.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_berlin_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/berlin/transactions.v b/CoqOfPython/ethereum/berlin/transactions.v index ec6283a..f9801b3 100644 --- a/CoqOfPython/ethereum/berlin/transactions.v +++ b/CoqOfPython/ethereum/berlin/transactions.v @@ -40,9 +40,6 @@ Axiom ethereum_base_types_imports_slotted_freezable : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_fork_types_imports_Address : IsImported globals "ethereum.berlin.fork_types" "Address". @@ -185,20 +182,24 @@ Definition decode_transaction : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "tx" |), - Constant.int 0 - |), - Constant.int 1 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "tx" |), + Constant.int 0 + |), + Constant.int 1 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.return_ (| M.call (| M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "decode_to" |), diff --git a/CoqOfPython/ethereum/berlin/trie.v b/CoqOfPython/ethereum/berlin/trie.v index 17cb6d3..da83e80 100644 --- a/CoqOfPython/ethereum/berlin/trie.v +++ b/CoqOfPython/ethereum/berlin/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_muir_glacier_imports_trie : IsImported globals "ethereum.muir_glacier" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1112,17 +1109,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/berlin/vm/instructions/environment.v b/CoqOfPython/ethereum/berlin/vm/instructions/environment.v index 32e395c..d9640ab 100644 --- a/CoqOfPython/ethereum/berlin/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/berlin/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1301,38 +1298,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/berlin/vm/instructions/log.v b/CoqOfPython/ethereum/berlin/vm/instructions/log.v index 1337c84..67aa1be 100644 --- a/CoqOfPython/ethereum/berlin/vm/instructions/log.v +++ b/CoqOfPython/ethereum/berlin/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_blocks_imports_Log : IsImported globals "ethereum.berlin.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/berlin/vm/instructions/stack.v b/CoqOfPython/ethereum/berlin/vm/instructions/stack.v index 278c237..0f0c7fd 100644 --- a/CoqOfPython/ethereum/berlin/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/berlin/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_vm_imports_Evm : IsImported globals "ethereum.berlin.vm" "Evm". Axiom ethereum_berlin_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/berlin/vm/instructions/storage.v b/CoqOfPython/ethereum/berlin/vm/instructions/storage.v index 52b350a..b51185e 100644 --- a/CoqOfPython/ethereum/berlin/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/berlin/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_state_imports_get_storage : IsImported globals "ethereum.berlin.state" "get_storage". Axiom ethereum_berlin_state_imports_get_storage_original : @@ -192,17 +189,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -472,14 +473,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/berlin/vm/instructions/system.v b/CoqOfPython/ethereum/berlin/vm/instructions/system.v index 2ca2a94..9b3d237 100644 --- a/CoqOfPython/ethereum/berlin/vm/instructions/system.v +++ b/CoqOfPython/ethereum/berlin/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -144,14 +141,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1172,28 +1173,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1718,14 +1723,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "beneficiary_balance" , M.get_field (| M.call (| diff --git a/CoqOfPython/ethereum/berlin/vm/interpreter.v b/CoqOfPython/ethereum/berlin/vm/interpreter.v index 4f2bc27..a15bcdb 100644 --- a/CoqOfPython/ethereum/berlin/vm/interpreter.v +++ b/CoqOfPython/ethereum/berlin/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_blocks_imports_Log : IsImported globals "ethereum.berlin.blocks" "Log". diff --git a/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/alt_bn128.v index e1e1dcd..b670c0d 100644 --- a/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_vm_imports_Evm : IsImported globals "ethereum.berlin.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/blake2f.v index 341c3dd..a743249 100644 --- a/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/berlin/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_berlin_vm_imports_Evm : IsImported globals "ethereum.berlin.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/byzantium/fork.v b/CoqOfPython/ethereum/byzantium/fork.v index 3e13179..7a4ad2e 100644 --- a/CoqOfPython/ethereum/byzantium/fork.v +++ b/CoqOfPython/ethereum/byzantium/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -420,61 +417,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -544,63 +561,79 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -615,17 +648,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -642,17 +679,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -780,37 +821,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -842,17 +891,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1186,23 +1239,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1231,25 +1288,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1277,56 +1338,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1383,39 +1452,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1423,47 +1504,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1613,20 +1706,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1649,46 +1746,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2154,47 +2263,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2237,37 +2354,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/byzantium/state.v b/CoqOfPython/ethereum/byzantium/state.v index 01ea880..adcefd3 100644 --- a/CoqOfPython/ethereum/byzantium/state.v +++ b/CoqOfPython/ethereum/byzantium/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.byzantium.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_byzantium_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/byzantium/trie.v b/CoqOfPython/ethereum/byzantium/trie.v index 3a14967..cf2d2c4 100644 --- a/CoqOfPython/ethereum/byzantium/trie.v +++ b/CoqOfPython/ethereum/byzantium/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_spurious_dragon_imports_trie : IsImported globals "ethereum.spurious_dragon" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/byzantium/vm/instructions/environment.v b/CoqOfPython/ethereum/byzantium/vm/instructions/environment.v index 3434f92..a2281d2 100644 --- a/CoqOfPython/ethereum/byzantium/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/byzantium/vm/instructions/environment.v @@ -24,9 +24,6 @@ Axiom ethereum_base_types_imports_U256 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1200,38 +1197,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/byzantium/vm/instructions/log.v b/CoqOfPython/ethereum/byzantium/vm/instructions/log.v index a41ebb4..21427de 100644 --- a/CoqOfPython/ethereum/byzantium/vm/instructions/log.v +++ b/CoqOfPython/ethereum/byzantium/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_blocks_imports_Log : IsImported globals "ethereum.byzantium.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/byzantium/vm/instructions/stack.v b/CoqOfPython/ethereum/byzantium/vm/instructions/stack.v index 03bb7ed..9ae868d 100644 --- a/CoqOfPython/ethereum/byzantium/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/byzantium/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_vm_imports_Evm : IsImported globals "ethereum.byzantium.vm" "Evm". Axiom ethereum_byzantium_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/byzantium/vm/instructions/storage.v b/CoqOfPython/ethereum/byzantium/vm/instructions/storage.v index b33b714..4ac0a8c 100644 --- a/CoqOfPython/ethereum/byzantium/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/byzantium/vm/instructions/storage.v @@ -19,9 +19,6 @@ Introduction Implementations of the EVM storage related instructions. ". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_state_imports_get_storage : IsImported globals "ethereum.byzantium.state" "get_storage". Axiom ethereum_byzantium_state_imports_set_storage : @@ -229,14 +226,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/byzantium/vm/instructions/system.v b/CoqOfPython/ethereum/byzantium/vm/instructions/system.v index f4ae8dc..781ced3 100644 --- a/CoqOfPython/ethereum/byzantium/vm/instructions/system.v +++ b/CoqOfPython/ethereum/byzantium/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_fork_types_imports_Address : IsImported globals "ethereum.byzantium.fork_types" "Address". @@ -187,14 +184,18 @@ Definition create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -941,28 +942,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1432,14 +1437,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "beneficiary_balance" , M.get_field (| M.call (| diff --git a/CoqOfPython/ethereum/byzantium/vm/interpreter.v b/CoqOfPython/ethereum/byzantium/vm/interpreter.v index dd4923c..3944e03 100644 --- a/CoqOfPython/ethereum/byzantium/vm/interpreter.v +++ b/CoqOfPython/ethereum/byzantium/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_blocks_imports_Log : IsImported globals "ethereum.byzantium.blocks" "Log". diff --git a/CoqOfPython/ethereum/byzantium/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/byzantium/vm/precompiled_contracts/alt_bn128.v index 397d62e..7593750 100644 --- a/CoqOfPython/ethereum/byzantium/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/byzantium/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_byzantium_vm_imports_Evm : IsImported globals "ethereum.byzantium.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/cancun/fork.v b/CoqOfPython/ethereum/cancun/fork.v index 61cc921..558f8cc 100644 --- a/CoqOfPython/ethereum/cancun/fork.v +++ b/CoqOfPython/ethereum/cancun/fork.v @@ -49,9 +49,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -436,17 +433,21 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "excess_blob_gas" |), - M.get_name (| globals, locals_stack, "excess_blob_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "excess_blob_gas" |), + M.get_name (| globals, locals_stack, "excess_blob_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_header" |), make_list [ @@ -455,17 +456,21 @@ Definition state_transition : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "block" |), "ommers" |), - make_tuple [ ] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "block" |), "ommers" |), + make_tuple [ ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "apply_body_output" , M.call (| @@ -494,83 +499,111 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "withdrawals_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "withdrawals_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "blob_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "blob_gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "withdrawals_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "withdrawals_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "blob_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "blob_gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -642,21 +675,25 @@ Definition calculate_base_fee_per_gas : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ELASTICITY_MULTIPLIER" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_name (| globals, locals_stack, "block_gas_limit" |); - M.get_name (| globals, locals_stack, "parent_gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), + make_list [ + M.get_name (| globals, locals_stack, "block_gas_limit" |); + M.get_name (| globals, locals_stack, "parent_gas_limit" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -801,17 +838,21 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "expected_base_fee_per_gas" , M.call (| @@ -825,92 +866,120 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "nonce" |), + Constant.bytes "0000000000000000" |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "nonce" |), - Constant.bytes "0000000000000000" - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "ommers_hash" |), - M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "ommers_hash" |), + M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -927,17 +996,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_header_in_globals : @@ -1330,46 +1403,58 @@ Definition check_transaction : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "max_gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "max_gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.return_ (| make_tuple [ M.get_name (| globals, locals_stack, "sender" |); M.get_name (| globals, locals_stack, "effective_gas_price" |); M.get_name (| globals, locals_stack, "blob_versioned_hashes" |) ] |) in @@ -1776,17 +1861,21 @@ Definition apply_body : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_name (| globals, locals_stack, "blob_gas_used" |), - M.get_name (| globals, locals_stack, "MAX_BLOB_GAS_PER_BLOCK" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_name (| globals, locals_stack, "blob_gas_used" |), + M.get_name (| globals, locals_stack, "MAX_BLOB_GAS_PER_BLOCK" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_gas_used" , BinOp.sub (| @@ -2563,47 +2652,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2663,37 +2760,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/cancun/state.v b/CoqOfPython/ethereum/cancun/state.v index fc9d4bc..da3b936 100644 --- a/CoqOfPython/ethereum/cancun/state.v +++ b/CoqOfPython/ethereum/cancun/state.v @@ -53,9 +53,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_blocks_imports_Withdrawal : IsImported globals "ethereum.cancun.blocks" "Withdrawal". diff --git a/CoqOfPython/ethereum/cancun/trie.v b/CoqOfPython/ethereum/cancun/trie.v index 18a2730..77a7a79 100644 --- a/CoqOfPython/ethereum/cancun/trie.v +++ b/CoqOfPython/ethereum/cancun/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_shanghai_imports_trie : IsImported globals "ethereum.shanghai" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1121,17 +1118,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/cancun/vm/instructions/environment.v b/CoqOfPython/ethereum/cancun/vm/instructions/environment.v index 0532a10..48a9835 100644 --- a/CoqOfPython/ethereum/cancun/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/cancun/vm/instructions/environment.v @@ -29,9 +29,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1307,38 +1304,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/cancun/vm/instructions/log.v b/CoqOfPython/ethereum/cancun/vm/instructions/log.v index 7239f6e..efe393c 100644 --- a/CoqOfPython/ethereum/cancun/vm/instructions/log.v +++ b/CoqOfPython/ethereum/cancun/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_blocks_imports_Log : IsImported globals "ethereum.cancun.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/cancun/vm/instructions/stack.v b/CoqOfPython/ethereum/cancun/vm/instructions/stack.v index 0507859..e8e7475 100644 --- a/CoqOfPython/ethereum/cancun/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/cancun/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_vm_imports_Evm : IsImported globals "ethereum.cancun.vm" "Evm". Axiom ethereum_cancun_vm_imports_stack : @@ -213,23 +210,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -297,23 +298,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/cancun/vm/instructions/storage.v b/CoqOfPython/ethereum/cancun/vm/instructions/storage.v index b6f29ff..7b6c265 100644 --- a/CoqOfPython/ethereum/cancun/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/cancun/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_state_imports_get_storage : IsImported globals "ethereum.cancun.state" "get_storage". Axiom ethereum_cancun_state_imports_get_storage_original : @@ -196,17 +193,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -476,14 +477,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ @@ -611,14 +616,18 @@ Definition tstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_transient_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/cancun/vm/instructions/system.v b/CoqOfPython/ethereum/cancun/vm/instructions/system.v index ccd8b32..d649fb4 100644 --- a/CoqOfPython/ethereum/cancun/vm/instructions/system.v +++ b/CoqOfPython/ethereum/cancun/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -132,26 +129,30 @@ Definition generic_create : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "call_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "call_data" |) + ], + make_dict [] + |), + BinOp.mult (| + Constant.int 2, + M.get_name (| globals, locals_stack, "MAX_CODE_SIZE" |) + |) |), - BinOp.mult (| - Constant.int 2, - M.get_name (| globals, locals_stack, "MAX_CODE_SIZE" |) - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "accessed_addresses" |), "add" |), make_list [ @@ -180,14 +181,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1236,28 +1241,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1727,14 +1736,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "originator" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "current_target" |) diff --git a/CoqOfPython/ethereum/cancun/vm/interpreter.v b/CoqOfPython/ethereum/cancun/vm/interpreter.v index b9090f0..5906ef9 100644 --- a/CoqOfPython/ethereum/cancun/vm/interpreter.v +++ b/CoqOfPython/ethereum/cancun/vm/interpreter.v @@ -57,9 +57,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_blocks_imports_Log : IsImported globals "ethereum.cancun.blocks" "Log". diff --git a/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/alt_bn128.v index 704b817..72febd2 100644 --- a/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_vm_imports_Evm : IsImported globals "ethereum.cancun.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/blake2f.v index 49bba15..8e64102 100644 --- a/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_vm_imports_Evm : IsImported globals "ethereum.cancun.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/point_evaluation.v b/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/point_evaluation.v index ff9e10f..9a1a965 100644 --- a/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/point_evaluation.v +++ b/CoqOfPython/ethereum/cancun/vm/precompiled_contracts/point_evaluation.v @@ -31,9 +31,6 @@ Axiom ethereum_base_types_imports_U256 : Axiom ethereum_base_types_imports_Bytes : IsImported globals "ethereum.base_types" "Bytes". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_cancun_vm_imports_Evm : IsImported globals "ethereum.cancun.vm" "Evm". @@ -75,23 +72,27 @@ Definition point_evaluation : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 192 |), - Constant.int 192 - |); - M.get_name (| globals, locals_stack, "KZGProofError" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "KZGProofError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "versioned_hash" , M.slice (| @@ -151,32 +152,40 @@ Definition point_evaluation : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "kzg_commitment_to_versioned_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "commitment" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "kzg_commitment_to_versioned_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "commitment" |) + ], + make_dict [] + |), + M.get_name (| globals, locals_stack, "versioned_hash" |) |), - M.get_name (| globals, locals_stack, "versioned_hash" |) - |); - M.get_name (| globals, locals_stack, "KZGProofError" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "KZGProofError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.get_name (| globals, locals_stack, "kzg_proof_verification" |); - M.get_name (| globals, locals_stack, "KZGProofError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.get_name (| globals, locals_stack, "kzg_proof_verification" |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "KZGProofError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/constantinople/fork.v b/CoqOfPython/ethereum/constantinople/fork.v index 8fbbebc..a8f5609 100644 --- a/CoqOfPython/ethereum/constantinople/fork.v +++ b/CoqOfPython/ethereum/constantinople/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -420,61 +417,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -544,63 +561,79 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -615,17 +648,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -642,17 +679,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -780,37 +821,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -842,17 +891,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1186,23 +1239,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1231,25 +1288,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1277,56 +1338,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1383,39 +1452,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1423,47 +1504,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1613,20 +1706,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1649,46 +1746,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2154,47 +2263,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2237,37 +2354,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/constantinople/state.v b/CoqOfPython/ethereum/constantinople/state.v index 4397bcd..8065ef2 100644 --- a/CoqOfPython/ethereum/constantinople/state.v +++ b/CoqOfPython/ethereum/constantinople/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_constantinople_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.constantinople.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_constantinople_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/constantinople/trie.v b/CoqOfPython/ethereum/constantinople/trie.v index 1805950..1c6c1cf 100644 --- a/CoqOfPython/ethereum/constantinople/trie.v +++ b/CoqOfPython/ethereum/constantinople/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_byzantium_imports_trie : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/constantinople/vm/instructions/environment.v b/CoqOfPython/ethereum/constantinople/vm/instructions/environment.v index 7cdb3c9..30e614f 100644 --- a/CoqOfPython/ethereum/constantinople/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/constantinople/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1208,38 +1205,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/constantinople/vm/instructions/log.v b/CoqOfPython/ethereum/constantinople/vm/instructions/log.v index 2f5f39c..f7c6eb0 100644 --- a/CoqOfPython/ethereum/constantinople/vm/instructions/log.v +++ b/CoqOfPython/ethereum/constantinople/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_constantinople_blocks_imports_Log : IsImported globals "ethereum.constantinople.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/constantinople/vm/instructions/stack.v b/CoqOfPython/ethereum/constantinople/vm/instructions/stack.v index d9af9a4..213a61d 100644 --- a/CoqOfPython/ethereum/constantinople/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/constantinople/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_constantinople_vm_imports_Evm : IsImported globals "ethereum.constantinople.vm" "Evm". Axiom ethereum_constantinople_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/constantinople/vm/instructions/storage.v b/CoqOfPython/ethereum/constantinople/vm/instructions/storage.v index b00ab11..4ebea17 100644 --- a/CoqOfPython/ethereum/constantinople/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/constantinople/vm/instructions/storage.v @@ -19,9 +19,6 @@ Introduction Implementations of the EVM storage related instructions. ". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_constantinople_state_imports_get_storage : IsImported globals "ethereum.constantinople.state" "get_storage". Axiom ethereum_constantinople_state_imports_set_storage : @@ -229,14 +226,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/constantinople/vm/instructions/system.v b/CoqOfPython/ethereum/constantinople/vm/instructions/system.v index 658f239..e412246 100644 --- a/CoqOfPython/ethereum/constantinople/vm/instructions/system.v +++ b/CoqOfPython/ethereum/constantinople/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -135,14 +132,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1134,28 +1135,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1625,14 +1630,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "beneficiary_balance" , M.get_field (| M.call (| diff --git a/CoqOfPython/ethereum/constantinople/vm/interpreter.v b/CoqOfPython/ethereum/constantinople/vm/interpreter.v index 8cb4096..ff50d70 100644 --- a/CoqOfPython/ethereum/constantinople/vm/interpreter.v +++ b/CoqOfPython/ethereum/constantinople/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_constantinople_blocks_imports_Log : IsImported globals "ethereum.constantinople.blocks" "Log". diff --git a/CoqOfPython/ethereum/constantinople/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/constantinople/vm/precompiled_contracts/alt_bn128.v index a1fc47d..2cd6450 100644 --- a/CoqOfPython/ethereum/constantinople/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/constantinople/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_constantinople_vm_imports_Evm : IsImported globals "ethereum.constantinople.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/dao_fork/fork.v b/CoqOfPython/ethereum/dao_fork/fork.v index b1467d1..81cdf18 100644 --- a/CoqOfPython/ethereum/dao_fork/fork.v +++ b/CoqOfPython/ethereum/dao_fork/fork.v @@ -56,9 +56,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -420,61 +417,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -537,63 +554,79 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -607,17 +640,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -634,17 +671,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -665,17 +706,21 @@ Definition validate_header : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |), - Constant.bytes "64616f2d686172642d666f726b" - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |), + Constant.bytes "64616f2d686172642d666f726b" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( @@ -808,77 +853,89 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - M.pure Constant.None_)). - -Axiom validate_proof_of_work_in_globals : - IsInGlobals globals "validate_proof_of_work" (make_function validate_proof_of_work). - -Definition check_transaction : Value.t -> Value.t -> M := - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "tx"; "gas_available" ] in - ltac:(M.monadic ( - let _ := Constant.str " - Check if the transaction is includable in the block. - - Parameters - ---------- - tx : - The transaction. - gas_available : - The gas remaining in the block. - - Returns - ------- - sender_address : - The sender of the transaction. + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_)). + +Axiom validate_proof_of_work_in_globals : + IsInGlobals globals "validate_proof_of_work" (make_function validate_proof_of_work). + +Definition check_transaction : Value.t -> Value.t -> M := + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "tx"; "gas_available" ] in + ltac:(M.monadic ( + let _ := Constant.str " + Check if the transaction is includable in the block. + + Parameters + ---------- + tx : + The transaction. + gas_available : + The gas remaining in the block. + + Returns + ------- + sender_address : + The sender of the transaction. Raises ------ InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1214,23 +1271,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1259,25 +1320,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1305,56 +1370,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1411,39 +1484,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1451,47 +1536,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1641,20 +1738,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1677,46 +1778,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2103,66 +2216,78 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 27 - |), - ltac:(M.monadic ( - Compare.eq (| + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| M.get_name (| globals, locals_stack, "v" |), - Constant.int 28 - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) + Constant.int 27 + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 28 + |) + )) |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/dao_fork/state.v b/CoqOfPython/ethereum/dao_fork/state.v index 81d41be..0c04804 100644 --- a/CoqOfPython/ethereum/dao_fork/state.v +++ b/CoqOfPython/ethereum/dao_fork/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_dao_fork_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.dao_fork.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_dao_fork_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/dao_fork/trie.v b/CoqOfPython/ethereum/dao_fork/trie.v index 3f75039..49baacd 100644 --- a/CoqOfPython/ethereum/dao_fork/trie.v +++ b/CoqOfPython/ethereum/dao_fork/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_homestead_imports_trie : IsImported globals "ethereum.homestead" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/dao_fork/vm/instructions/stack.v b/CoqOfPython/ethereum/dao_fork/vm/instructions/stack.v index 1501cfc..a563586 100644 --- a/CoqOfPython/ethereum/dao_fork/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/dao_fork/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_dao_fork_vm_imports_Evm : IsImported globals "ethereum.dao_fork.vm" "Evm". Axiom ethereum_dao_fork_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/frontier/fork.v b/CoqOfPython/ethereum/frontier/fork.v index 0c1207b..78c861d 100644 --- a/CoqOfPython/ethereum/frontier/fork.v +++ b/CoqOfPython/ethereum/frontier/fork.v @@ -51,9 +51,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -394,61 +391,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -511,63 +528,79 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -581,17 +614,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -608,17 +645,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -746,37 +787,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -806,17 +855,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1152,23 +1205,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1197,25 +1254,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1243,56 +1304,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1349,39 +1418,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1389,47 +1470,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1579,20 +1672,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1615,46 +1712,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2010,63 +2119,75 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 27 - |), - ltac:(M.monadic ( - Compare.eq (| + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| M.get_name (| globals, locals_stack, "v" |), - Constant.int 28 - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) + Constant.int 27 + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 28 + |) + )) |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "s" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "s" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/frontier/state.v b/CoqOfPython/ethereum/frontier/state.v index 938c52f..a9dc4f8 100644 --- a/CoqOfPython/ethereum/frontier/state.v +++ b/CoqOfPython/ethereum/frontier/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_frontier_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.frontier.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_frontier_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/frontier/trie.v b/CoqOfPython/ethereum/frontier/trie.v index 59ff15a..4510038 100644 --- a/CoqOfPython/ethereum/frontier/trie.v +++ b/CoqOfPython/ethereum/frontier/trie.v @@ -53,9 +53,6 @@ Axiom typing_imports_cast : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1100,17 +1097,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/frontier/vm/instructions/stack.v b/CoqOfPython/ethereum/frontier/vm/instructions/stack.v index ce27daa..216a9ea 100644 --- a/CoqOfPython/ethereum/frontier/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/frontier/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_frontier_vm_imports_Evm : IsImported globals "ethereum.frontier.vm" "Evm". Axiom ethereum_frontier_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/gray_glacier/fork.v b/CoqOfPython/ethereum/gray_glacier/fork.v index fec80de..1e09989 100644 --- a/CoqOfPython/ethereum/gray_glacier/fork.v +++ b/CoqOfPython/ethereum/gray_glacier/fork.v @@ -56,9 +56,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -445,61 +442,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -571,21 +588,25 @@ Definition calculate_base_fee_per_gas : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ELASTICITY_MULTIPLIER" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_name (| globals, locals_stack, "block_gas_limit" |); - M.get_name (| globals, locals_stack, "parent_gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), + make_list [ + M.get_name (| globals, locals_stack, "block_gas_limit" |); + M.get_name (| globals, locals_stack, "parent_gas_limit" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -730,17 +751,21 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "expected_base_fee_per_gas" , M.call (| @@ -754,17 +779,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "parent_has_ommers" , Compare.not_eq (| @@ -772,48 +801,60 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -828,17 +869,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -855,17 +900,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -994,37 +1043,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -1060,17 +1117,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1095,28 +1156,36 @@ Definition check_transaction : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "priority_fee_per_gas" , M.call (| @@ -1141,17 +1210,21 @@ Definition check_transaction : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_price" , M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) @@ -1556,23 +1629,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1601,25 +1678,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1647,56 +1728,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1753,39 +1842,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1793,47 +1894,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1983,20 +2096,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -2044,46 +2161,58 @@ Definition process_transaction : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "max_gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "max_gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_fee" , BinOp.mult (| @@ -2688,47 +2817,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2788,37 +2925,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/gray_glacier/state.v b/CoqOfPython/ethereum/gray_glacier/state.v index 3ed4a4d..ef758f8 100644 --- a/CoqOfPython/ethereum/gray_glacier/state.v +++ b/CoqOfPython/ethereum/gray_glacier/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.gray_glacier.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_gray_glacier_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/gray_glacier/trie.v b/CoqOfPython/ethereum/gray_glacier/trie.v index c3cc1b3..61cc05d 100644 --- a/CoqOfPython/ethereum/gray_glacier/trie.v +++ b/CoqOfPython/ethereum/gray_glacier/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_arrow_glacier_imports_trie : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1112,17 +1109,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/gray_glacier/vm/instructions/environment.v b/CoqOfPython/ethereum/gray_glacier/vm/instructions/environment.v index bf909cc..ab02fa1 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1301,38 +1298,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/gray_glacier/vm/instructions/log.v b/CoqOfPython/ethereum/gray_glacier/vm/instructions/log.v index 9121fcd..e4c79a9 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/instructions/log.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_blocks_imports_Log : IsImported globals "ethereum.gray_glacier.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/gray_glacier/vm/instructions/stack.v b/CoqOfPython/ethereum/gray_glacier/vm/instructions/stack.v index 80ee75e..1feddaa 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_vm_imports_Evm : IsImported globals "ethereum.gray_glacier.vm" "Evm". Axiom ethereum_gray_glacier_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/gray_glacier/vm/instructions/storage.v b/CoqOfPython/ethereum/gray_glacier/vm/instructions/storage.v index 3597d53..8a3b184 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_state_imports_get_storage : IsImported globals "ethereum.gray_glacier.state" "get_storage". Axiom ethereum_gray_glacier_state_imports_get_storage_original : @@ -192,17 +189,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -472,14 +473,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/gray_glacier/vm/instructions/system.v b/CoqOfPython/ethereum/gray_glacier/vm/instructions/system.v index 77ef2f4..5234f88 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/instructions/system.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -142,14 +139,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1170,28 +1171,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1661,14 +1666,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "originator" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "current_target" |) diff --git a/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v b/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v index df5155f..e42d819 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_blocks_imports_Log : IsImported globals "ethereum.gray_glacier.blocks" "Log". diff --git a/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/alt_bn128.v index 58291d3..dc40487 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_vm_imports_Evm : IsImported globals "ethereum.gray_glacier.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/blake2f.v index 905ec42..58a8ba6 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_gray_glacier_vm_imports_Evm : IsImported globals "ethereum.gray_glacier.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/homestead/fork.v b/CoqOfPython/ethereum/homestead/fork.v index 958b4c5..0411b57 100644 --- a/CoqOfPython/ethereum/homestead/fork.v +++ b/CoqOfPython/ethereum/homestead/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -399,61 +396,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -516,63 +533,79 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -586,17 +619,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -613,17 +650,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -751,37 +792,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -811,17 +860,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1157,23 +1210,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1202,25 +1259,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1248,56 +1309,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1354,39 +1423,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1394,47 +1475,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1584,20 +1677,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1620,46 +1717,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2046,66 +2155,78 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 27 - |), - ltac:(M.monadic ( - Compare.eq (| + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| M.get_name (| globals, locals_stack, "v" |), - Constant.int 28 - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) + Constant.int 27 + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 28 + |) + )) |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/homestead/state.v b/CoqOfPython/ethereum/homestead/state.v index 53a7f48..77cf5a2 100644 --- a/CoqOfPython/ethereum/homestead/state.v +++ b/CoqOfPython/ethereum/homestead/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_homestead_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.homestead.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_homestead_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/homestead/trie.v b/CoqOfPython/ethereum/homestead/trie.v index dd8f289..e70442d 100644 --- a/CoqOfPython/ethereum/homestead/trie.v +++ b/CoqOfPython/ethereum/homestead/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_frontier_imports_trie : IsImported globals "ethereum.frontier" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/homestead/vm/instructions/stack.v b/CoqOfPython/ethereum/homestead/vm/instructions/stack.v index 2e5cf75..5bc4c0f 100644 --- a/CoqOfPython/ethereum/homestead/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/homestead/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_homestead_vm_imports_Evm : IsImported globals "ethereum.homestead.vm" "Evm". Axiom ethereum_homestead_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/istanbul/fork.v b/CoqOfPython/ethereum/istanbul/fork.v index 76a26c4..6b9584f 100644 --- a/CoqOfPython/ethereum/istanbul/fork.v +++ b/CoqOfPython/ethereum/istanbul/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -420,61 +417,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -544,63 +561,79 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -615,17 +648,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -642,17 +679,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -780,37 +821,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -842,17 +891,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1186,23 +1239,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1231,25 +1288,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1277,56 +1338,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1383,39 +1452,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1423,47 +1504,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1613,20 +1706,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1649,46 +1746,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2154,47 +2263,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2237,37 +2354,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/istanbul/state.v b/CoqOfPython/ethereum/istanbul/state.v index 8675ac6..fedd877 100644 --- a/CoqOfPython/ethereum/istanbul/state.v +++ b/CoqOfPython/ethereum/istanbul/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.istanbul.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_istanbul_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/istanbul/trie.v b/CoqOfPython/ethereum/istanbul/trie.v index 67f365f..6a6cca8 100644 --- a/CoqOfPython/ethereum/istanbul/trie.v +++ b/CoqOfPython/ethereum/istanbul/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_constantinople_imports_trie : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/istanbul/vm/instructions/environment.v b/CoqOfPython/ethereum/istanbul/vm/instructions/environment.v index 6b79690..aa3c769 100644 --- a/CoqOfPython/ethereum/istanbul/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/istanbul/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1210,38 +1207,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/istanbul/vm/instructions/log.v b/CoqOfPython/ethereum/istanbul/vm/instructions/log.v index e8134cc..390bb49 100644 --- a/CoqOfPython/ethereum/istanbul/vm/instructions/log.v +++ b/CoqOfPython/ethereum/istanbul/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_blocks_imports_Log : IsImported globals "ethereum.istanbul.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/istanbul/vm/instructions/stack.v b/CoqOfPython/ethereum/istanbul/vm/instructions/stack.v index 9a94bcc..660db71 100644 --- a/CoqOfPython/ethereum/istanbul/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/istanbul/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_vm_imports_Evm : IsImported globals "ethereum.istanbul.vm" "Evm". Axiom ethereum_istanbul_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/istanbul/vm/instructions/storage.v b/CoqOfPython/ethereum/istanbul/vm/instructions/storage.v index b9cffe3..ea0a248 100644 --- a/CoqOfPython/ethereum/istanbul/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/istanbul/vm/instructions/storage.v @@ -19,9 +19,6 @@ Introduction Implementations of the EVM storage related instructions. ". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_state_imports_get_storage : IsImported globals "ethereum.istanbul.state" "get_storage". Axiom ethereum_istanbul_state_imports_get_storage_original : @@ -158,17 +155,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -393,14 +394,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/istanbul/vm/instructions/system.v b/CoqOfPython/ethereum/istanbul/vm/instructions/system.v index 08cec11..fb15d11 100644 --- a/CoqOfPython/ethereum/istanbul/vm/instructions/system.v +++ b/CoqOfPython/ethereum/istanbul/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -135,14 +132,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1134,28 +1135,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1625,14 +1630,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "beneficiary_balance" , M.get_field (| M.call (| diff --git a/CoqOfPython/ethereum/istanbul/vm/interpreter.v b/CoqOfPython/ethereum/istanbul/vm/interpreter.v index 59d492a..04176d9 100644 --- a/CoqOfPython/ethereum/istanbul/vm/interpreter.v +++ b/CoqOfPython/ethereum/istanbul/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_blocks_imports_Log : IsImported globals "ethereum.istanbul.blocks" "Log". diff --git a/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/alt_bn128.v index e1a15d2..72c314b 100644 --- a/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_vm_imports_Evm : IsImported globals "ethereum.istanbul.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/blake2f.v index 2d516d0..614c51f 100644 --- a/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/istanbul/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_istanbul_vm_imports_Evm : IsImported globals "ethereum.istanbul.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/london/fork.v b/CoqOfPython/ethereum/london/fork.v index 140abfc..69ff22f 100644 --- a/CoqOfPython/ethereum/london/fork.v +++ b/CoqOfPython/ethereum/london/fork.v @@ -56,9 +56,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -451,61 +448,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -599,21 +616,25 @@ Definition calculate_base_fee_per_gas : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ELASTICITY_MULTIPLIER" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_name (| globals, locals_stack, "block_gas_limit" |); - M.get_name (| globals, locals_stack, "parent_gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), + make_list [ + M.get_name (| globals, locals_stack, "block_gas_limit" |); + M.get_name (| globals, locals_stack, "parent_gas_limit" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -758,17 +779,21 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "is_fork_block" , Compare.eq (| @@ -790,17 +815,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "parent_has_ommers" , Compare.not_eq (| @@ -808,48 +837,60 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -864,17 +905,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -891,19 +936,23 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "validate_proof_of_work" |), + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.call (| + M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ M.get_name (| globals, locals_stack, "header" |) ], @@ -1030,37 +1079,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -1096,17 +1153,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1131,28 +1192,36 @@ Definition check_transaction : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "priority_fee_per_gas" , M.call (| @@ -1177,17 +1246,21 @@ Definition check_transaction : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_price" , M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) @@ -1592,23 +1665,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1637,25 +1714,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1683,56 +1764,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1789,39 +1878,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1829,47 +1930,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -2019,20 +2132,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -2080,46 +2197,58 @@ Definition process_transaction : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "max_gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "max_gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_fee" , BinOp.mult (| @@ -2724,47 +2853,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2824,37 +2961,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/london/state.v b/CoqOfPython/ethereum/london/state.v index 3b93813..e9c7791 100644 --- a/CoqOfPython/ethereum/london/state.v +++ b/CoqOfPython/ethereum/london/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.london.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_london_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/london/trie.v b/CoqOfPython/ethereum/london/trie.v index 560c96a..0f660ed 100644 --- a/CoqOfPython/ethereum/london/trie.v +++ b/CoqOfPython/ethereum/london/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_berlin_imports_trie : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1112,17 +1109,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/london/vm/instructions/environment.v b/CoqOfPython/ethereum/london/vm/instructions/environment.v index ec5c90b..2c8a2eb 100644 --- a/CoqOfPython/ethereum/london/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/london/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1301,38 +1298,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/london/vm/instructions/log.v b/CoqOfPython/ethereum/london/vm/instructions/log.v index 24c46c8..badb719 100644 --- a/CoqOfPython/ethereum/london/vm/instructions/log.v +++ b/CoqOfPython/ethereum/london/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_blocks_imports_Log : IsImported globals "ethereum.london.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/london/vm/instructions/stack.v b/CoqOfPython/ethereum/london/vm/instructions/stack.v index 64b63d7..4e0842e 100644 --- a/CoqOfPython/ethereum/london/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/london/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_vm_imports_Evm : IsImported globals "ethereum.london.vm" "Evm". Axiom ethereum_london_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/london/vm/instructions/storage.v b/CoqOfPython/ethereum/london/vm/instructions/storage.v index e7c06d7..d719876 100644 --- a/CoqOfPython/ethereum/london/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/london/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_state_imports_get_storage : IsImported globals "ethereum.london.state" "get_storage". Axiom ethereum_london_state_imports_get_storage_original : @@ -192,17 +189,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -472,14 +473,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/london/vm/instructions/system.v b/CoqOfPython/ethereum/london/vm/instructions/system.v index acf71d7..70e1b26 100644 --- a/CoqOfPython/ethereum/london/vm/instructions/system.v +++ b/CoqOfPython/ethereum/london/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -142,14 +139,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1170,28 +1171,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1661,14 +1666,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "originator" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "current_target" |) diff --git a/CoqOfPython/ethereum/london/vm/interpreter.v b/CoqOfPython/ethereum/london/vm/interpreter.v index 2f605dd..9ef161b 100644 --- a/CoqOfPython/ethereum/london/vm/interpreter.v +++ b/CoqOfPython/ethereum/london/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_blocks_imports_Log : IsImported globals "ethereum.london.blocks" "Log". diff --git a/CoqOfPython/ethereum/london/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/london/vm/precompiled_contracts/alt_bn128.v index 46f439d..731086c 100644 --- a/CoqOfPython/ethereum/london/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/london/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_vm_imports_Evm : IsImported globals "ethereum.london.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/london/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/london/vm/precompiled_contracts/blake2f.v index 79a4508..073dd8b 100644 --- a/CoqOfPython/ethereum/london/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/london/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_london_vm_imports_Evm : IsImported globals "ethereum.london.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/muir_glacier/fork.v b/CoqOfPython/ethereum/muir_glacier/fork.v index a4e88b1..a2ed1d3 100644 --- a/CoqOfPython/ethereum/muir_glacier/fork.v +++ b/CoqOfPython/ethereum/muir_glacier/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -420,61 +417,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -544,63 +561,79 @@ Definition validate_header : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -615,17 +648,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -642,17 +679,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -780,37 +821,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -842,17 +891,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1186,23 +1239,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1231,25 +1288,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1277,56 +1338,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1383,39 +1452,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1423,47 +1504,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1613,20 +1706,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1649,46 +1746,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2154,47 +2263,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2237,37 +2354,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/muir_glacier/state.v b/CoqOfPython/ethereum/muir_glacier/state.v index ef3e2e2..82804de 100644 --- a/CoqOfPython/ethereum/muir_glacier/state.v +++ b/CoqOfPython/ethereum/muir_glacier/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.muir_glacier.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_muir_glacier_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/muir_glacier/trie.v b/CoqOfPython/ethereum/muir_glacier/trie.v index fcfdf83..848ebea 100644 --- a/CoqOfPython/ethereum/muir_glacier/trie.v +++ b/CoqOfPython/ethereum/muir_glacier/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_istanbul_imports_trie : IsImported globals "ethereum.istanbul" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/muir_glacier/vm/instructions/environment.v b/CoqOfPython/ethereum/muir_glacier/vm/instructions/environment.v index 33eaba1..15f48b3 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1210,38 +1207,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/muir_glacier/vm/instructions/log.v b/CoqOfPython/ethereum/muir_glacier/vm/instructions/log.v index fc48be4..f38d2a0 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/instructions/log.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_blocks_imports_Log : IsImported globals "ethereum.muir_glacier.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/muir_glacier/vm/instructions/stack.v b/CoqOfPython/ethereum/muir_glacier/vm/instructions/stack.v index 2a82584..cf3f4ce 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_vm_imports_Evm : IsImported globals "ethereum.muir_glacier.vm" "Evm". Axiom ethereum_muir_glacier_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/muir_glacier/vm/instructions/storage.v b/CoqOfPython/ethereum/muir_glacier/vm/instructions/storage.v index 8f9a00f..62c3642 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/instructions/storage.v @@ -19,9 +19,6 @@ Introduction Implementations of the EVM storage related instructions. ". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_state_imports_get_storage : IsImported globals "ethereum.muir_glacier.state" "get_storage". Axiom ethereum_muir_glacier_state_imports_get_storage_original : @@ -158,17 +155,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -393,14 +394,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/muir_glacier/vm/instructions/system.v b/CoqOfPython/ethereum/muir_glacier/vm/instructions/system.v index 6e297e5..efa46e0 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/instructions/system.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -135,14 +132,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1134,28 +1135,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1625,14 +1630,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "beneficiary_balance" , M.get_field (| M.call (| diff --git a/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v b/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v index 2470a44..4888427 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_blocks_imports_Log : IsImported globals "ethereum.muir_glacier.blocks" "Log". diff --git a/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/alt_bn128.v index ebc0707..4ab4b09 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_vm_imports_Evm : IsImported globals "ethereum.muir_glacier.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/blake2f.v index 942ab47..5f4ad53 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_muir_glacier_vm_imports_Evm : IsImported globals "ethereum.muir_glacier.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/paris/fork.v b/CoqOfPython/ethereum/paris/fork.v index b1af4e9..ecb57e5 100644 --- a/CoqOfPython/ethereum/paris/fork.v +++ b/CoqOfPython/ethereum/paris/fork.v @@ -49,9 +49,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -365,17 +362,21 @@ Definition state_transition : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "block" |), "ommers" |), - make_tuple [ ] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "block" |), "ommers" |), + make_tuple [ ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "apply_body_output" , M.call (| @@ -401,61 +402,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -527,21 +548,25 @@ Definition calculate_base_fee_per_gas : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ELASTICITY_MULTIPLIER" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_name (| globals, locals_stack, "block_gas_limit" |); - M.get_name (| globals, locals_stack, "parent_gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), + make_list [ + M.get_name (| globals, locals_stack, "block_gas_limit" |); + M.get_name (| globals, locals_stack, "parent_gas_limit" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -686,17 +711,21 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "expected_base_fee_per_gas" , M.call (| @@ -710,92 +739,120 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "nonce" |), - Constant.bytes "0000000000000000" - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "ommers_hash" |), - M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "nonce" |), + Constant.bytes "0000000000000000" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "ommers_hash" |), + M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -812,17 +869,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_header_in_globals : @@ -858,17 +919,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -893,28 +958,36 @@ Definition check_transaction : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "priority_fee_per_gas" , M.call (| @@ -939,17 +1012,21 @@ Definition check_transaction : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_price" , M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) @@ -1339,20 +1416,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1400,46 +1481,58 @@ Definition process_transaction : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "max_gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "max_gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_fee" , BinOp.mult (| @@ -2044,47 +2137,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2144,37 +2245,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/paris/state.v b/CoqOfPython/ethereum/paris/state.v index 199d24b..b4bdaa2 100644 --- a/CoqOfPython/ethereum/paris/state.v +++ b/CoqOfPython/ethereum/paris/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.paris.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_paris_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/paris/trie.v b/CoqOfPython/ethereum/paris/trie.v index 2054643..77a9899 100644 --- a/CoqOfPython/ethereum/paris/trie.v +++ b/CoqOfPython/ethereum/paris/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_gray_glacier_imports_trie : IsImported globals "ethereum.gray_glacier" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1112,17 +1109,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/paris/vm/instructions/environment.v b/CoqOfPython/ethereum/paris/vm/instructions/environment.v index a8f141e..3e6d2b9 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1301,38 +1298,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/paris/vm/instructions/log.v b/CoqOfPython/ethereum/paris/vm/instructions/log.v index 4b6aeec..fdda486 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/log.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_blocks_imports_Log : IsImported globals "ethereum.paris.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/paris/vm/instructions/stack.v b/CoqOfPython/ethereum/paris/vm/instructions/stack.v index 01fe256..469a86f 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_vm_imports_Evm : IsImported globals "ethereum.paris.vm" "Evm". Axiom ethereum_paris_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/paris/vm/instructions/storage.v b/CoqOfPython/ethereum/paris/vm/instructions/storage.v index 917c30e..7779b02 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_state_imports_get_storage : IsImported globals "ethereum.paris.state" "get_storage". Axiom ethereum_paris_state_imports_get_storage_original : @@ -192,17 +189,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -472,14 +473,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/paris/vm/instructions/system.v b/CoqOfPython/ethereum/paris/vm/instructions/system.v index a544734..aa26ff3 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/system.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -142,14 +139,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1170,28 +1171,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1661,14 +1666,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "originator" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "current_target" |) diff --git a/CoqOfPython/ethereum/paris/vm/interpreter.v b/CoqOfPython/ethereum/paris/vm/interpreter.v index 546e237..dabd225 100644 --- a/CoqOfPython/ethereum/paris/vm/interpreter.v +++ b/CoqOfPython/ethereum/paris/vm/interpreter.v @@ -57,9 +57,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_blocks_imports_Log : IsImported globals "ethereum.paris.blocks" "Log". diff --git a/CoqOfPython/ethereum/paris/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/paris/vm/precompiled_contracts/alt_bn128.v index 60bdf74..6b828b8 100644 --- a/CoqOfPython/ethereum/paris/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/paris/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_vm_imports_Evm : IsImported globals "ethereum.paris.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/paris/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/paris/vm/precompiled_contracts/blake2f.v index 55830a7..81b3a6c 100644 --- a/CoqOfPython/ethereum/paris/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/paris/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_paris_vm_imports_Evm : IsImported globals "ethereum.paris.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/rlp.v b/CoqOfPython/ethereum/rlp.v index 2c81b45..4cc4793 100644 --- a/CoqOfPython/ethereum/rlp.v +++ b/CoqOfPython/ethereum/rlp.v @@ -55,9 +55,6 @@ Axiom ethereum_exceptions_imports_RLPDecodingError : Axiom ethereum_exceptions_imports_RLPEncodingError : IsImported globals "ethereum.exceptions" "RLPEncodingError". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_base_types_imports_Bytes : IsImported globals "ethereum.base_types" "Bytes". Axiom ethereum_base_types_imports_Bytes0 : @@ -607,29 +604,33 @@ Definition decode : Value.t -> Value.t -> M := decoded_data : `RLP` Object decoded from `encoded_data`. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_data" |) + ], + make_dict [] + |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "RLPDecodingError" |), make_list [ - M.get_name (| globals, locals_stack, "encoded_data" |) + Constant.str "Cannot decode empty bytestring" ], make_dict [] - |), - Constant.int 0 - |); - M.call (| - M.get_name (| globals, locals_stack, "RLPDecodingError" |), - make_list [ - Constant.str "Cannot decode empty bytestring" - ], - make_dict [] - |) - ], - make_dict [] - |) in + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -772,21 +773,25 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "list" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "list" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -847,29 +852,33 @@ Definition _decode_to : Value.t -> Value.t -> M := "args" , make_list [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |) - ], - make_dict [] - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__args__" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__args__" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.for_ (| make_tuple [ M.get_name (| globals, locals_stack, "t" |); M.get_name (| globals, locals_stack, "raw_item" |) ], @@ -928,21 +937,25 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "Bytes" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "Bytes" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1051,21 +1064,25 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "list" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "list" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "items" , make_list [] @@ -1334,38 +1351,46 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "Bytes" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |) - ], - make_dict [] - |), - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "LENGTH" |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "Bytes" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "LENGTH" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.return_ (| M.call (| M.get_name (| globals, locals_stack, "cls" |), @@ -1391,21 +1416,25 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "Bytes" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "Bytes" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.return_ (| M.get_name (| globals, locals_stack, "raw_rlp" |) |) in @@ -1425,21 +1454,25 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "Bytes" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "Bytes" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: Try *) M.pure Constant.None_ (* else *) @@ -1456,21 +1489,25 @@ Definition _decode_to : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |); - M.get_name (| globals, locals_stack, "list" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |); + M.get_name (| globals, locals_stack, "list" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assert (| M.call (| M.get_name (| globals, locals_stack, "isinstance" |), make_list [ @@ -1483,45 +1520,49 @@ Definition _decode_to : Value.t -> Value.t -> M := "args" , make_list [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "fields" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |) + ], + make_dict [] + |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "raw_rlp" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + M.for_ (| + make_tuple [ M.get_name (| globals, locals_stack, "field" |); M.get_name (| globals, locals_stack, "rlp_item" |) ], + M.call (| + M.get_name (| globals, locals_stack, "zip" |), + make_list [ M.call (| - M.get_name (| globals, locals_stack, "len" |), + M.get_name (| globals, locals_stack, "fields" |), make_list [ - M.call (| - M.get_name (| globals, locals_stack, "fields" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |) - ], - make_dict [] - |) - ], - make_dict [] - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "raw_rlp" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in - let _ := - M.for_ (| - make_tuple [ M.get_name (| globals, locals_stack, "field" |); M.get_name (| globals, locals_stack, "rlp_item" |) ], - M.call (| - M.get_name (| globals, locals_stack, "zip" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "fields" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |) + M.get_name (| globals, locals_stack, "cls" |) ], make_dict [] |); @@ -1675,23 +1716,27 @@ Definition decode_to_bytes : Value.t -> Value.t -> M := Constant.int 128 |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "len_raw_data" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_bytes" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "len_raw_data" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_bytes" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "raw_data" , M.slice (| @@ -1704,28 +1749,32 @@ Definition decode_to_bytes : Value.t -> Value.t -> M := Constant.None_ |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| BoolOp.and (| - Compare.eq (| - M.get_name (| globals, locals_stack, "len_raw_data" |), - Constant.int 1 - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "raw_data" |), - Constant.int 0 - |), - Constant.int 128 - |) - )) - |) |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.eq (| + M.get_name (| globals, locals_stack, "len_raw_data" |), + Constant.int 1 + |), + ltac:(M.monadic ( + Compare.lt (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "raw_data" |), + Constant.int 0 + |), + Constant.int 128 + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.return_ (| M.get_name (| globals, locals_stack, "raw_data" |) |) in @@ -1745,40 +1794,48 @@ Definition decode_to_bytes : Value.t -> Value.t -> M := Constant.int 183 |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - BinOp.sub (| - M.get_name (| globals, locals_stack, "decoded_data_start_idx" |), - Constant.int 1 - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_bytes" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "encoded_bytes" |), - Constant.int 1 - |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + BinOp.sub (| + M.get_name (| globals, locals_stack, "decoded_data_start_idx" |), + Constant.int 1 + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_bytes" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "encoded_bytes" |), + Constant.int 1 + |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "len_decoded_data" , M.call (| @@ -1794,17 +1851,21 @@ Definition decode_to_bytes : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_name (| globals, locals_stack, "len_decoded_data" |), - Constant.int 56 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "len_decoded_data" |), + Constant.int 56 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "decoded_data_end_idx" , BinOp.add (| @@ -1812,26 +1873,30 @@ Definition decode_to_bytes : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "len_decoded_data" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - BinOp.sub (| - M.get_name (| globals, locals_stack, "decoded_data_end_idx" |), - Constant.int 1 - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_bytes" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + BinOp.sub (| + M.get_name (| globals, locals_stack, "decoded_data_end_idx" |), + Constant.int 1 + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_bytes" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.return_ (| M.slice (| M.get_name (| globals, locals_stack, "encoded_bytes" |), @@ -1889,23 +1954,27 @@ Definition decode_to_sequence : Value.t -> Value.t -> M := Constant.int 192 |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "len_joined_encodings" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_sequence" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "len_joined_encodings" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_sequence" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "joined_encodings" , M.slice (| @@ -1934,40 +2003,48 @@ Definition decode_to_sequence : Value.t -> Value.t -> M := Constant.int 247 |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - BinOp.sub (| - M.get_name (| globals, locals_stack, "joined_encodings_start_idx" |), - Constant.int 1 - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_sequence" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "encoded_sequence" |), - Constant.int 1 - |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + BinOp.sub (| + M.get_name (| globals, locals_stack, "joined_encodings_start_idx" |), + Constant.int 1 + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_sequence" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "encoded_sequence" |), + Constant.int 1 + |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "len_joined_encodings" , M.call (| @@ -1983,17 +2060,21 @@ Definition decode_to_sequence : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_name (| globals, locals_stack, "len_joined_encodings" |), - Constant.int 56 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "len_joined_encodings" |), + Constant.int 56 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "joined_encodings_end_idx" , BinOp.add (| @@ -2001,26 +2082,30 @@ Definition decode_to_sequence : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "len_joined_encodings" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - BinOp.sub (| - M.get_name (| globals, locals_stack, "joined_encodings_end_idx" |), - Constant.int 1 - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_sequence" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + BinOp.sub (| + M.get_name (| globals, locals_stack, "joined_encodings_end_idx" |), + Constant.int 1 + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_sequence" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "joined_encodings" , M.slice (| @@ -2100,29 +2185,33 @@ Definition decode_joined_encodings : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - BinOp.sub (| - BinOp.add (| - M.get_name (| globals, locals_stack, "item_start_idx" |), - M.get_name (| globals, locals_stack, "encoded_item_length" |) - |), - Constant.int 1 - |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "joined_encodings" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + BinOp.sub (| + BinOp.add (| + M.get_name (| globals, locals_stack, "item_start_idx" |), + M.get_name (| globals, locals_stack, "encoded_item_length" |) + |), + Constant.int 1 + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "joined_encodings" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "encoded_item" , M.slice (| @@ -2190,23 +2279,27 @@ Definition decode_item_length : Value.t -> Value.t -> M := ------- rlp_length : `int` " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_data" |) + ], + make_dict [] + |), + Constant.int 0 |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "first_rlp_byte" , M.call (| @@ -2284,37 +2377,45 @@ Definition decode_item_length : Value.t -> Value.t -> M := Constant.int 183 |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "length_length" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "encoded_data" |), - Constant.int 1 - |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "length_length" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_data" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "encoded_data" |), + Constant.int 1 + |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "decoded_data_length" , M.call (| @@ -2371,37 +2472,45 @@ Definition decode_item_length : Value.t -> Value.t -> M := Constant.int 247 |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "length_length" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "encoded_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "encoded_data" |), - Constant.int 1 - |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "RLPDecodingError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "length_length" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "encoded_data" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "encoded_data" |), + Constant.int 1 + |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "RLPDecodingError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "decoded_data_length" , M.call (| diff --git a/CoqOfPython/ethereum/shanghai/fork.v b/CoqOfPython/ethereum/shanghai/fork.v index 8daa517..ec7a643 100644 --- a/CoqOfPython/ethereum/shanghai/fork.v +++ b/CoqOfPython/ethereum/shanghai/fork.v @@ -49,9 +49,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -374,17 +371,21 @@ Definition state_transition : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "block" |), "ommers" |), - make_tuple [ ] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "block" |), "ommers" |), + make_tuple [ ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "apply_body_output" , M.call (| @@ -411,72 +412,96 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "withdrawals_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "withdrawals_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "withdrawals_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "withdrawals_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -548,21 +573,25 @@ Definition calculate_base_fee_per_gas : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ELASTICITY_MULTIPLIER" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_name (| globals, locals_stack, "block_gas_limit" |); - M.get_name (| globals, locals_stack, "parent_gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), + make_list [ + M.get_name (| globals, locals_stack, "block_gas_limit" |); + M.get_name (| globals, locals_stack, "parent_gas_limit" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -707,17 +736,21 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_used" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "expected_base_fee_per_gas" , M.call (| @@ -731,92 +764,120 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "expected_base_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "base_fee_per_gas" |) |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - Constant.int 0 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "nonce" |), - Constant.bytes "0000000000000000" - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "ommers_hash" |), - M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "nonce" |), + Constant.bytes "0000000000000000" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "ommers_hash" |), + M.get_name (| globals, locals_stack, "EMPTY_OMMER_HASH" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -833,17 +894,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_header_in_globals : @@ -879,17 +944,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -914,28 +983,36 @@ Definition check_transaction : Value.t -> Value.t -> M := |), (* then *) ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_priority_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "max_fee_per_gas" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "priority_fee_per_gas" , M.call (| @@ -960,17 +1037,21 @@ Definition check_transaction : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), - M.get_name (| globals, locals_stack, "base_fee_per_gas" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |), + M.get_name (| globals, locals_stack, "base_fee_per_gas" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_price" , M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) @@ -1448,20 +1529,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1509,46 +1594,58 @@ Definition process_transaction : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "max_gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "max_gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "effective_gas_fee" , BinOp.mult (| @@ -2250,47 +2347,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2350,37 +2455,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/shanghai/state.v b/CoqOfPython/ethereum/shanghai/state.v index dbbbdc6..a8def0d 100644 --- a/CoqOfPython/ethereum/shanghai/state.v +++ b/CoqOfPython/ethereum/shanghai/state.v @@ -51,9 +51,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_blocks_imports_Withdrawal : IsImported globals "ethereum.shanghai.blocks" "Withdrawal". diff --git a/CoqOfPython/ethereum/shanghai/trie.v b/CoqOfPython/ethereum/shanghai/trie.v index 1d05c08..bcb78f9 100644 --- a/CoqOfPython/ethereum/shanghai/trie.v +++ b/CoqOfPython/ethereum/shanghai/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_paris_imports_trie : IsImported globals "ethereum.paris" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1121,17 +1118,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/shanghai/vm/instructions/environment.v b/CoqOfPython/ethereum/shanghai/vm/instructions/environment.v index 3b5f363..20809ba 100644 --- a/CoqOfPython/ethereum/shanghai/vm/instructions/environment.v +++ b/CoqOfPython/ethereum/shanghai/vm/instructions/environment.v @@ -27,9 +27,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_crypto_hash_imports_keccak256 : IsImported globals "ethereum.crypto.hash" "keccak256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -1301,38 +1298,42 @@ Definition returndatacopy : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - BinOp.add (| - M.call (| - M.get_name (| globals, locals_stack, "Uint" |), - make_list [ - M.get_name (| globals, locals_stack, "return_data_start_position" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + BinOp.add (| + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "return_data_start_position" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "Uint" |), + make_list [ + M.get_name (| globals, locals_stack, "size" |) + ], + make_dict [] + |) |), M.call (| - M.get_name (| globals, locals_stack, "Uint" |), + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_name (| globals, locals_stack, "size" |) + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) ], make_dict [] |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfBoundsRead" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfBoundsRead" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), diff --git a/CoqOfPython/ethereum/shanghai/vm/instructions/log.v b/CoqOfPython/ethereum/shanghai/vm/instructions/log.v index e038d49..81e5e82 100644 --- a/CoqOfPython/ethereum/shanghai/vm/instructions/log.v +++ b/CoqOfPython/ethereum/shanghai/vm/instructions/log.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_blocks_imports_Log : IsImported globals "ethereum.shanghai.blocks" "Log". @@ -178,14 +175,18 @@ Definition log_n : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "extend_memory" |), "expand_by" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "log_entry" , M.call (| diff --git a/CoqOfPython/ethereum/shanghai/vm/instructions/stack.v b/CoqOfPython/ethereum/shanghai/vm/instructions/stack.v index 389a283..f08413b 100644 --- a/CoqOfPython/ethereum/shanghai/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/shanghai/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_vm_imports_Evm : IsImported globals "ethereum.shanghai.vm" "Evm". Axiom ethereum_shanghai_vm_imports_stack : @@ -213,23 +210,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -297,23 +298,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/shanghai/vm/instructions/storage.v b/CoqOfPython/ethereum/shanghai/vm/instructions/storage.v index b051f0e..fe14329 100644 --- a/CoqOfPython/ethereum/shanghai/vm/instructions/storage.v +++ b/CoqOfPython/ethereum/shanghai/vm/instructions/storage.v @@ -22,9 +22,6 @@ Implementations of the EVM storage related instructions. Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_state_imports_get_storage : IsImported globals "ethereum.shanghai.state" "get_storage". Axiom ethereum_shanghai_state_imports_get_storage_original : @@ -192,17 +189,21 @@ Definition sstore : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), - M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), + M.get_name (| globals, locals_stack, "GAS_CALL_STIPEND" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "original_value" , M.call (| @@ -472,14 +473,18 @@ Definition sstore : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "set_storage" |), make_list [ diff --git a/CoqOfPython/ethereum/shanghai/vm/instructions/system.v b/CoqOfPython/ethereum/shanghai/vm/instructions/system.v index 608f02c..e0c3967 100644 --- a/CoqOfPython/ethereum/shanghai/vm/instructions/system.v +++ b/CoqOfPython/ethereum/shanghai/vm/instructions/system.v @@ -26,9 +26,6 @@ Axiom ethereum_base_types_imports_Bytes0 : Axiom ethereum_base_types_imports_Uint : IsImported globals "ethereum.base_types" "Uint". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_numeric_imports_ceil32 : IsImported globals "ethereum.utils.numeric" "ceil32". @@ -130,26 +127,30 @@ Definition generic_create : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "call_data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "call_data" |) + ], + make_dict [] + |), + BinOp.mult (| + Constant.int 2, + M.get_name (| globals, locals_stack, "MAX_CODE_SIZE" |) + |) |), - BinOp.mult (| - Constant.int 2, - M.get_name (| globals, locals_stack, "MAX_CODE_SIZE" |) - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "accessed_addresses" |), "add" |), make_list [ @@ -178,14 +179,18 @@ Definition generic_create : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "gas_left" |), M.get_name (| globals, locals_stack, "create_message_gas" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "return_data" |), Constant.bytes "" @@ -1234,28 +1239,32 @@ M.get_name (| globals, locals_stack, "GAS_CALL_VALUE" |) ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "value" |), - M.call (| - M.get_name (| globals, locals_stack, "U256" |), - make_list [ - Constant.int 0 - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "value" |), + M.call (| + M.get_name (| globals, locals_stack, "U256" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_op (| BinOp.add, M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "memory" |), @@ -1725,14 +1734,18 @@ Definition selfdestruct : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - UnOp.not (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |) |); - M.get_name (| globals, locals_stack, "WriteInStaticContext" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "is_static" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "WriteInStaticContext" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "originator" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "current_target" |) diff --git a/CoqOfPython/ethereum/shanghai/vm/interpreter.v b/CoqOfPython/ethereum/shanghai/vm/interpreter.v index 0d79dae..1c2cb66 100644 --- a/CoqOfPython/ethereum/shanghai/vm/interpreter.v +++ b/CoqOfPython/ethereum/shanghai/vm/interpreter.v @@ -57,9 +57,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_blocks_imports_Log : IsImported globals "ethereum.shanghai.blocks" "Log". diff --git a/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/alt_bn128.v b/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/alt_bn128.v index c716620..2bdf79d 100644 --- a/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/alt_bn128.v +++ b/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/alt_bn128.v @@ -41,9 +41,6 @@ Axiom ethereum_crypto_alt_bn128_imports_BNP2 : Axiom ethereum_crypto_alt_bn128_imports_pairing : IsImported globals "ethereum.crypto.alt_bn128" "pairing". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_vm_imports_Evm : IsImported globals "ethereum.shanghai.vm" "Evm". @@ -646,48 +643,56 @@ Definition alt_bn128_pairing_check : Value.t -> Value.t -> M := )) |) in (* At stmt: unsupported node type: Try *) - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), - make_list [ - M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) - ], - make_dict [] - |), - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "OutOfGasError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "p" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "q" |), "mul_by" |), + make_list [ + M.get_name (| globals, locals_stack, "ALT_BN128_CURVE_ORDER" |) + ], + make_dict [] + |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNP2" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "OutOfGasError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| diff --git a/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/blake2f.v b/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/blake2f.v index 75c88ab..c89ea72 100644 --- a/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/blake2f.v +++ b/CoqOfPython/ethereum/shanghai/vm/precompiled_contracts/blake2f.v @@ -22,9 +22,6 @@ Implementation of the `Blake2` precompiled contract. Axiom ethereum_crypto_blake2_imports_Blake2b : IsImported globals "ethereum.crypto.blake2" "Blake2b". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_shanghai_vm_imports_Evm : IsImported globals "ethereum.shanghai.vm" "Evm". @@ -52,23 +49,27 @@ Definition blake2f : Value.t -> Value.t -> M := "data" , M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "message" |), "data" |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |) + ], + make_dict [] + |), + Constant.int 213 |), - Constant.int 213 - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "blake2b" , M.call (| @@ -98,20 +99,24 @@ Definition blake2f : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_name (| globals, locals_stack, "f" |), - make_list [ - Constant.int 0; - Constant.int 1 - ] - |); - M.get_name (| globals, locals_stack, "InvalidParameter" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_name (| globals, locals_stack, "f" |), + make_list [ + Constant.int 0; + Constant.int 1 + ] + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidParameter" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "output" |), M.call (| diff --git a/CoqOfPython/ethereum/spurious_dragon/fork.v b/CoqOfPython/ethereum/spurious_dragon/fork.v index d39f4d1..7dbee50 100644 --- a/CoqOfPython/ethereum/spurious_dragon/fork.v +++ b/CoqOfPython/ethereum/spurious_dragon/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -402,61 +399,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -519,63 +536,79 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -589,17 +622,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -616,17 +653,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -754,37 +795,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -816,17 +865,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1166,23 +1219,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1211,25 +1268,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1257,56 +1318,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1363,39 +1432,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1403,47 +1484,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1593,20 +1686,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1629,46 +1726,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2134,47 +2243,55 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -2217,37 +2334,41 @@ Definition recover_sender : Value.t -> Value.t -> M := M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 35, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - BinOp.add (| - Constant.int 36, - BinOp.mult (| - M.get_name (| globals, locals_stack, "chain_id" |), - Constant.int 2 - |) - |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 35, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + BinOp.add (| + Constant.int 36, + BinOp.mult (| + M.get_name (| globals, locals_stack, "chain_id" |), + Constant.int 2 + |) + |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/spurious_dragon/state.v b/CoqOfPython/ethereum/spurious_dragon/state.v index dc14e86..97c9fc2 100644 --- a/CoqOfPython/ethereum/spurious_dragon/state.v +++ b/CoqOfPython/ethereum/spurious_dragon/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_spurious_dragon_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.spurious_dragon.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_spurious_dragon_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/spurious_dragon/trie.v b/CoqOfPython/ethereum/spurious_dragon/trie.v index d113dc3..bccef5f 100644 --- a/CoqOfPython/ethereum/spurious_dragon/trie.v +++ b/CoqOfPython/ethereum/spurious_dragon/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_tangerine_whistle_imports_trie : IsImported globals "ethereum.tangerine_whistle" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/instructions/stack.v b/CoqOfPython/ethereum/spurious_dragon/vm/instructions/stack.v index a0b8f8b..b2c9b1d 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_spurious_dragon_vm_imports_Evm : IsImported globals "ethereum.spurious_dragon.vm" "Evm". Axiom ethereum_spurious_dragon_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v b/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v index 6bb6729..e1c22a9 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v @@ -55,9 +55,6 @@ Axiom ethereum_trace_imports_TransactionEnd : Axiom ethereum_trace_imports_evm_trace : IsImported globals "ethereum.trace" "evm_trace". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_spurious_dragon_blocks_imports_Log : IsImported globals "ethereum.spurious_dragon.blocks" "Log". diff --git a/CoqOfPython/ethereum/tangerine_whistle/fork.v b/CoqOfPython/ethereum/tangerine_whistle/fork.v index ab3bad3..dc4c5b8 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/fork.v +++ b/CoqOfPython/ethereum/tangerine_whistle/fork.v @@ -54,9 +54,6 @@ Axiom ethereum_ethash_imports_hashimoto_light : Axiom ethereum_exceptions_imports_InvalidBlock : IsImported globals "ethereum.exceptions" "InvalidBlock". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_imports_rlp : IsImported globals "ethereum" "rlp". @@ -399,61 +396,81 @@ Definition state_transition : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_gas_used" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "gas_used" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "transactions_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "transactions_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "state_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "state_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "receipt_root" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "receipt_root" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "apply_body_output" |), "block_logs_bloom" |), + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "block" |), "header" |), "bloom" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "chain" |), "blocks" |), "append" |), make_list [ @@ -516,63 +533,79 @@ Definition validate_header : Value.t -> Value.t -> M := parent_header : Parent Header of the header to check for correctness " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), - BinOp.add (| - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), - Constant.int 1 - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "check_gas_limit" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); - M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), + let _ := + (* if *) + M.if_then_else (| + Compare.lt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "timestamp" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "number" |), + BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "number" |), + Constant.int 1 + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "check_gas_limit" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "gas_limit" |); + M.get_field (| M.get_name (| globals, locals_stack, "parent_header" |), "gas_limit" |) ], make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "extra_data" |) + ], + make_dict [] + |), + Constant.int 32 |), - Constant.int 32 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_difficulty" , M.call (| @@ -586,17 +619,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), - M.get_name (| globals, locals_stack, "block_difficulty" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |), + M.get_name (| globals, locals_stack, "block_difficulty" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "block_parent_hash" , M.call (| @@ -613,17 +650,21 @@ Definition validate_header : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "block_parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "block_parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.call (| M.get_name (| globals, locals_stack, "validate_proof_of_work" |), make_list [ @@ -751,37 +792,45 @@ Definition validate_proof_of_work : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_name (| globals, locals_stack, "mix_digest" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "mix_digest" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "mix_digest" |) |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), - M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |), + M.get_field (| M.get_name (| globals, locals_stack, "header" |), "difficulty" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_)). Axiom validate_proof_of_work_in_globals : @@ -811,17 +860,21 @@ Definition check_transaction : Value.t -> Value.t -> M := InvalidBlock : If the transaction is not includable. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), - M.get_name (| globals, locals_stack, "gas_available" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas" |), + M.get_name (| globals, locals_stack, "gas_available" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender_address" , M.call (| @@ -1157,23 +1210,27 @@ Definition validate_ommers : Value.t -> Value.t -> M := make_dict [] |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "rlp" |), "rlp_hash" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "ommers_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := (* if *) M.if_then_else (| @@ -1202,25 +1259,29 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer" |), M.get_name (| globals, locals_stack, "ommers" |), ltac:(M.monadic ( - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "number" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_parent_header" , M.get_field (| M.get_subscript (| @@ -1248,56 +1309,64 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt_e (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers" |) + ], + make_dict [] + |), + Constant.int 2 |), - Constant.int 2 - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommers_hashes" , Constant.str "(* At expr: unsupported node type: ListComp *)" |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "set" |), + make_list [ + M.get_name (| globals, locals_stack, "ommers_hashes" |) + ], + make_dict [] + |) + ], + make_dict [] + |) |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "set" |), - make_list [ - M.get_name (| globals, locals_stack, "ommers_hashes" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "recent_canonical_blocks" , M.slice (| @@ -1354,39 +1423,51 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_name (| globals, locals_stack, "ommer_index" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "block_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_in (| - M.get_name (| globals, locals_stack, "ommer_hash" |), - M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "block_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.in_ (| + M.get_name (| globals, locals_stack, "ommer_hash" |), + M.get_name (| globals, locals_stack, "recent_ommers_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "ommer_age" , BinOp.sub (| @@ -1394,47 +1475,59 @@ Definition validate_ommers : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "number" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt_e (| - Constant.int 1, - M.get_name (| globals, locals_stack, "ommer_age" |) - |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "ommer_age" |), - M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.in_ (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), - M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt (| + Constant.int 1, + M.get_name (| globals, locals_stack, "ommer_age" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "ommer_age" |), + M.get_name (| globals, locals_stack, "MAX_OMMER_DEPTH" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_in (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_name (| globals, locals_stack, "recent_canonical_block_hashes" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "ommer" |), "parent_hash" |), + M.get_field (| M.get_name (| globals, locals_stack, "block_header" |), "parent_hash" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in M.pure Constant.None_ )), ltac:(M.monadic ( @@ -1584,20 +1677,24 @@ Definition process_transaction : Value.t -> Value.t -> M := logs : `Tuple[ethereum.blocks.Log, ...]` Logs generated during execution. " in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "validate_transaction" |), - make_list [ - M.get_name (| globals, locals_stack, "tx" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "validate_transaction" |), + make_list [ + M.get_name (| globals, locals_stack, "tx" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "sender" , M.get_field (| M.get_name (| globals, locals_stack, "env" |), "origin" |) @@ -1620,46 +1717,58 @@ Definition process_transaction : Value.t -> Value.t -> M := M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "gas_price" |) |) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.gt_e (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "gas_fee" |), - M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), - M.call (| - M.get_name (| globals, locals_stack, "bytearray" |), - make_list [], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "nonce" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "nonce" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "balance" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "gas_fee" |), + M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "value" |) + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_field (| M.get_name (| globals, locals_stack, "sender_account" |), "code" |), + M.call (| + M.get_name (| globals, locals_stack, "bytearray" |), + make_list [], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "gas" , BinOp.sub (| @@ -2046,66 +2155,78 @@ Definition recover_sender : Value.t -> Value.t -> M := make_tuple [ M.get_name (| globals, locals_stack, "v" |); M.get_name (| globals, locals_stack, "r" |); M.get_name (| globals, locals_stack, "s" |) ], make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "v" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "r" |); M.get_field (| M.get_name (| globals, locals_stack, "tx" |), "s" |) ] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.or (| - Compare.eq (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 27 - |), - ltac:(M.monadic ( - Compare.eq (| + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.not_eq (| M.get_name (| globals, locals_stack, "v" |), - Constant.int 28 - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "r" |) + Constant.int 27 + |), + ltac:(M.monadic ( + Compare.not_eq (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 28 + |) + )) |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "r" |), - M.get_name (| globals, locals_stack, "SECP256K1N" |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - BoolOp.and (| - Compare.lt (| - Constant.int 0, - M.get_name (| globals, locals_stack, "s" |) + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "r" |) + |), + ltac:(M.monadic ( + Compare.gt_e (| + M.get_name (| globals, locals_stack, "r" |), + M.get_name (| globals, locals_stack, "SECP256K1N" |) + |) + )) |), - ltac:(M.monadic ( - Compare.lt_e (| - M.get_name (| globals, locals_stack, "s" |), - BinOp.floor_div (| - M.get_name (| globals, locals_stack, "SECP256K1N" |), - Constant.int 2 + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.gt_e (| + Constant.int 0, + M.get_name (| globals, locals_stack, "s" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "s" |), + BinOp.floor_div (| + M.get_name (| globals, locals_stack, "SECP256K1N" |), + Constant.int 2 + |) |) - |) - )) - |); - M.get_name (| globals, locals_stack, "InvalidBlock" |) - ], - make_dict [] - |) in + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "InvalidBlock" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "public_key" , M.call (| diff --git a/CoqOfPython/ethereum/tangerine_whistle/state.v b/CoqOfPython/ethereum/tangerine_whistle/state.v index 55b2806..654aa30 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/state.v +++ b/CoqOfPython/ethereum/tangerine_whistle/state.v @@ -49,9 +49,6 @@ Axiom ethereum_base_types_imports_Uint : Axiom ethereum_base_types_imports_modify : IsImported globals "ethereum.base_types" "modify". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_tangerine_whistle_fork_types_imports_EMPTY_ACCOUNT : IsImported globals "ethereum.tangerine_whistle.fork_types" "EMPTY_ACCOUNT". Axiom ethereum_tangerine_whistle_fork_types_imports_Account : diff --git a/CoqOfPython/ethereum/tangerine_whistle/trie.v b/CoqOfPython/ethereum/tangerine_whistle/trie.v index 16c4121..2866eb6 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/trie.v +++ b/CoqOfPython/ethereum/tangerine_whistle/trie.v @@ -56,9 +56,6 @@ Axiom ethereum_crypto_hash_imports_keccak256 : Axiom ethereum_dao_fork_imports_trie : IsImported globals "ethereum.dao_fork" "trie". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_utils_hexadecimal_imports_hex_to_bytes : IsImported globals "ethereum.utils.hexadecimal" "hex_to_bytes". @@ -1106,17 +1103,21 @@ Definition _prepare_trie : Value.t -> Value.t -> M := |) in M.pure Constant.None_ )) |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.not_eq (| - M.get_name (| globals, locals_stack, "encoded_value" |), - Constant.bytes "" - |); - M.get_name (| globals, locals_stack, "AssertionError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "encoded_value" |), + Constant.bytes "" + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "AssertionError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in (* At stmt: unsupported node type: AnnAssign *) let _ := (* if *) diff --git a/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/stack.v b/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/stack.v index 02f3067..97cb2a3 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/stack.v +++ b/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/stack.v @@ -25,9 +25,6 @@ Axiom functools_imports_partial : Axiom ethereum_base_types_imports_U256 : IsImported globals "ethereum.base_types" "U256". -Axiom ethereum_utils_ensure_imports_ensure : - IsImported globals "ethereum.utils.ensure" "ensure". - Axiom ethereum_tangerine_whistle_vm_imports_Evm : IsImported globals "ethereum.tangerine_whistle.vm" "Evm". Axiom ethereum_tangerine_whistle_vm_imports_stack : @@ -191,23 +188,27 @@ Definition dup_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign_local (| "data_to_duplicate" , M.get_subscript (| @@ -275,23 +276,27 @@ Definition swap_n : Value.t -> Value.t -> M := ], make_dict [] |) in - let _ := M.call (| - M.get_name (| globals, locals_stack, "ensure" |), - make_list [ - Compare.lt (| - M.get_name (| globals, locals_stack, "item_number" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) - ], - make_dict [] - |) - |); - M.get_name (| globals, locals_stack, "StackUnderflowError" |) - ], - make_dict [] - |) in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "item_number" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |) + ], + make_dict [] + |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.get_name (| globals, locals_stack, "StackUnderflowError" |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in let _ := M.assign (| make_tuple [ M.get_subscript (| M.get_field (| M.get_name (| globals, locals_stack, "evm" |), "stack" |), diff --git a/README.md b/README.md index b063467..3bf7bfa 100644 --- a/README.md +++ b/README.md @@ -18,43 +18,23 @@ The generated Coq code type checks, with some holes for expressions we do not ha ### Translate Python to Coq -For now this works only on the Ethereum code. We assume you have cloned both this repository and the [Ethereum specification](https://github.com/ethereum/execution-specs) in the same folder: +Clone this repository and run: -``` -├── coq-of-python -│   ├── CoqOfPython -│   ├── LICENSE -│   ├── main.py -│   └── README.md -└── execution-specs -    ├── CONTRIBUTING.md -    ├── LICENSE.md -    ├── lists -    ├── mypy.ini -    ├── network-upgrades -    ├── pyproject.toml -    ├── README.md -    ├── scripts -    ├── setup.cfg -    ├── setup.py -    ├── src -    ├── static -    ├── tests -    ├── tox.ini -    └── whitelist.txt +```sh +git submodule update --init --recursive ``` -Go into the `execution-specs/src` folder and run the following command: +as there are sub-modules. Then go in the `ethereum-execution-specs/src` folder and run: ```sh -find ethereum -name "*.py" -exec echo {} \; -exec python ../../coq-of-python/main.py {} \; +find ethereum -name "*.py" -print0 | xargs -0 -n 1 python ../../main.py ``` -This will translate each file of the Ethereum specification to Coq and put the result in the `coq-of-python/CoqOfPython/ethereum` folder. +This will translate each file of the Ethereum specification to Coq and put the result in the `CoqOfPython/ethereum` folder. ### Compile the Coq -Go into the `coq-of-python/CoqOfPython` folder and run the following command: +Go into the `CoqOfPython` folder and run the following command: ```sh make -j4 diff --git a/ethereum-execution-specs b/ethereum-execution-specs new file mode 160000 index 0000000..3bece82 --- /dev/null +++ b/ethereum-execution-specs @@ -0,0 +1 @@ +Subproject commit 3bece8272d6bccd06031b021a0ba054915ac8ea2 diff --git a/main.py b/main.py index 15788cd..1d6822b 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,7 @@ import ast import os import sys +from typing import Union def generate_error(kind, node): @@ -245,8 +246,8 @@ def generate_function_def_body(indent, node): def generate_if_then_else( indent, condition: ast.expr, - success: ast.expr | list[ast.stmt], - error: ast.expr | list[ast.stmt], + success: Union[ast.expr, list[ast.stmt]], + error: Union[ast.expr, list[ast.stmt]], ): return generate_indent(indent) + "(* if *)\n" + \ generate_indent(indent) + "M.if_then_else (|\n" + \ @@ -364,7 +365,7 @@ def generate_stmt(indent, node: ast.stmt): return generate_error("stmt", node) elif isinstance(node, ast.AsyncWith): return generate_error("stmt", node) - elif isinstance(node, ast.Match): + elif sys.version_info >= (3, 10) and isinstance(node, ast.Match): return generate_error("stmt", node) elif isinstance(node, ast.Raise): return generate_indent(indent) + "let _ := M.raise (| " + \ @@ -754,8 +755,9 @@ def generate_arg(node): input_file_name = sys.argv[1] -output_file_name = "../../coq-of-python/CoqOfPython/" + \ - input_file_name.replace(".py", ".v") +output_file_name = "../../CoqOfPython/" + input_file_name.replace(".py", ".v") + +print(f"Processing {input_file_name} -> {output_file_name}") file_content = open(input_file_name).read() parsed_tree = ast.parse(file_content)